我正在阅读 PHP 手册(具体来说是 each()
函数),并发现了以下警告:
注意
因为将数组分配给另一个变量会重置原始数组的指针,所以如果我们在循环内部将 $fruit 赋值给另一个变量,上面的示例将导致无限循环。
以下是一个示例:
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
?>
好的,这很有道理。但我决定做一个简单的测试:
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
foreach ($fruit as $key => $name) {
printf("[%s] => [%s]\n", $key, $name);
}
$fruit2 = $fruit;
echo current($fruit);
?>
预期结果是:指针已被重置。我的问题是,指针是否仅在数组结束后重置?
例如:
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
foreach ($fruit as $key => $name) {
printf("[%s] => [%s]\n", $key, $name);
}
reset($fruit);
next($fruit)."\n";
$fruit2 = $fruit;
echo current($fruit);
?>
指针仍然停留在第二个数组元素
('b' => 'banana')
。 这种行为是这种语言的特点吗?谢谢并对我的糟糕英语表示抱歉。
foreach()
函数的行为似乎出现了问题。但在 PHP 7 中已经修复:https://github.com/tpunt/PHP7-Reference#fixes-to-foreachs-behaviour - axiac