这是一个简单的循环
$list = array("A", "B", "C","D");
foreach ($list as $var) {
print(current($list));
}
输出(演示)
BBBB // Output for 5.2.4 - 5.5.0alpha4
BCD // Output for 4.4.1
AAAA // Output for 4.3.0 - 4.4.0, 4.4.2 - 5.2.3
问题 :
- 有人可以解释发生了什么吗?
- 为什么我没有得到 ABCD
- 即使数组的副本是由我制作的,但在当前稳定版本中
foreach
应该得到但没有得到AAAA
PHP
注意*我知道我可以简单地使用print $var
但来自 PHP DOC
current — 返回数组中的当前元素current()函数只返回当前由内部指针指向的数组元素的值。它不会以任何方式移动指针。如果内部指针指向元素列表末尾之外或数组为空,则 current() 返回 FALSE。
更新 1 - 新观察
感谢Daniel Figueroa:只需包装current
一个函数,您就会得到不同的结果
foreach ( $list as $var ) {
print(item($list));
}
function item($list) {
return current($list);
}
输出(演示)
BCDA // What the hell
问题 :
- 为什么不得到“BBBB”?
- 在函数中包装电流如何影响
foreach
输出? - 多余的“A”从何而来?
更新 2
$list = array("A","B","C","D");
item2($list);
function item2($list) {
foreach ( $list as $var ) {
print(current($list));
}
}
输出(见演示)
AAAA // No longer BBBB when using a function
问题 :
- 在函数中运行循环和在函数外运行它有什么不同,因为你在大多数 PHP 版本中都在函数
AAAA
之外和函数中运行BBBB