我可以不在PHP中的foreach后循环数组吗?

时间:2017-09-29 19:58:13

标签: php

我开始自学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下的内容?

1 个答案:

答案 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