我开始自学PHP并找到了一些我不了解的东西。如果真的很简单,我很抱歉!我没有看到我做错了什么,或者如果它是一个foreach循环的怪癖,知道什么和为什么会很有用。我正在尝试这个纯粹作为一个例子,看看循环如何在PHP中工作,所以我只是在文件中一个接一个地添加它们。
我的代码(基于书中的示例):
<?php
$p = array(
'Copier' => "Numero Uno",
'Inkjet' => "Numero Dos",
'Laser' => "Numero Tres",
'Photo' => "Numero Cuatro"
);
foreach ($p as $item => $desc) {
echo "$item: $desc<br />";
}
echo "<br />";
echo "---";
echo "<br /><br />";
while (list($item2, $desc2) = each($p)) {
echo "$item2: $desc2<br />";
}
使用此代码,我得到了这个输出:
Copier: Numero Uno
Inkjet: Numero Dos
Laser: Numero Tres
Photo: Numero Cuatro
---
如果我交换了foreach和while循环,我得到了这个(这是我期望的):
Copier: Numero Uno
Inkjet: Numero Dos
Laser: Numero Tres
Photo: Numero Cuatro
---
Copier: Numero Uno
Inkjet: Numero Dos
Laser: Numero Tres
Photo: Numero Cuatro
因为我while
之后没有获得foreach
的输出,所以我重命名了item和desc,以防万一$item2
,{ {1}})。
在写这篇文章的过程中,我发现从$desc2
创建一个新的变量数组并尝试使用它($p
)。
$p2
这很有效。我也尝试过再次重复foreach循环(复制并粘贴到while的位置)并且有效。
$p2 = $p;
while (list($item2, $desc2) = each($p2)) {
echo "$item2: $desc2<br />";
}
是否以foreach
无法理解的方式以某种方式排列$p
数组?这里发生了什么?有没有一种有用的方法可以看到php下的内容?
答案 0 :(得分:3)
在PHP7上测试后,我无法复制您的问题,但是如果您在早期版本的PHP上运行,则需要reset()
将数组指针返回到数组的开头:
$p = array(
'Copier' => "Numero Uno",
'Inkjet' => "Numero Dos",
'Laser' => "Numero Tres",
'Photo' => "Numero Cuatro"
);
foreach ($p as $item => $desc) {
echo "$item: $desc<br />";
}
reset($p);
echo "<br />";
echo "---";
echo "<br /><br />";
while (list($item, $desc) = each($p)) {
echo "$item: $desc<br />";
}
这会产生(example):
复印机:Numero Uno
喷墨:Numero Dos
激光:Numero Tres
照片:Numero Cuatro
--- ---
复印机:Numero Uno
喷墨:Numero Dos
激光:Numero Tres
照片:Numero Cuatro