【发布时间】:2013-01-28 17:24:09
【问题描述】:
这是一个简单的循环
$list = array("A", "B", "C","D");
foreach ($list as $var) {
print(current($list));
}
输出 (demo)
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);
}
输出(Demo)
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));
}
}
输出(See Demo)
AAAA // No longer BBBB when using a function
问题:
- 在函数中运行循环和在函数外运行它有什么不同,因为在大多数 PHP 版本中,你在外部得到
AAAA而在函数中得到BBBB
【问题讨论】:
-
你还需要 next($list) :)
-
这一定与“foreach 的工作原理”有关......这是一个谜:(。(stackoverflow.com/questions/10057671/how-foreach-actually-works)
-
我也添加了
arrays和foreach标签,因为,IMO,它属于它。如果您不同意,请还原我的更改。 :) -
标题有点误导;没有错误:)