这是一个简单的循环
$list = array("A", "B", "C","D");
foreach ($list as $var) {
print(current($list));
}
Run Code Online (Sandbox Code Playgroud)
输出(演示)
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
Run Code Online (Sandbox Code Playgroud)
题 :
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) { …Run Code Online (Sandbox Code Playgroud) 此代码输出:1 1 1 1
我期望0 0 0 0或0 1 2 3
<?php
$arr = array(0,1,2,3);
foreach($arr as $i)
{
echo current($arr), ' ';
}
?>
Run Code Online (Sandbox Code Playgroud) NikiC在另一个帖子中说:
在[foreach]迭代之前,
$array"软复制"用于foreach.这意味着没有实际的副本,但只有zval的refcount$array增加到2.
但是,我的测试代码显示了不同的结果:
$array = array(0, 1, 2);
xdebug_debug_zval('array'); // refcount=1, is_ref=0
// so far so good
foreach ($array as $key => $value) {
xdebug_debug_zval('array'); // refcount=3, is_ref=0
} // why is refcount 3 instead of 2?
Run Code Online (Sandbox Code Playgroud)
只需查看代码,我们最多可以看到两个数组变量.
为什么要引用引用计数3?
运行2后为什么不引用refcount foreach?