foreach循环中的php key()异常行为或获取foreach循环中的下一个键
看看这个:foreach循环中的php key()异常行为或获取foreach循环中的下一个键,php,arrays,behavior,next,Php,Arrays,Behavior,Next,看看这个: <?php $array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…'); foreach ($array as $key => $val){ echo "current key: $key, next key: ".key(($array))."<br>"; } ?>
<?php
$array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…');
foreach ($array as $key => $val){
echo "current key: $key, next key: ".key(($array))."<br>";
}
?>
我正在搜索一个函数,以获取foreach循环中关联数组的下一个键。我试了一下,突然奏效了。(如我的例子所示)
但这为什么有效呢?这有意义吗…不是对我!
你能给我解释一下吗
这是因为键(($array))
部分,但为什么呢?我是说。。这是一个错误。。我想写key($array)
,但忘了删除2个包装括号。
所以这是巧合
为什么会这样?我的意思是,这很好,但是…?根据PHP手册,key()返回当前数组位置的索引元素 问题不在于
键
,甚至不在于双括号。键通过引用接收数组,因此双圆括号的作用不大
这种行为来自于。当foreach
在数组中迭代时,不同版本的PHP在设置数组的内部current
指针时会表现出不同的行为,这是key()
PHP中的数组与大多数语言中的数组不同;它们实际上是对象(尤其是关联数组)。把它们想象成链表(它们不是链表,只是为了举例说明),当你反复浏览时,你需要知道你现在的位置和下一步的位置
这里明显发生的事情是,在您运行的PHP的任何版本上,foreach
在设置代码中的$key
和$value
变量之后,立即在for循环的开始处设置指向下一个元素的内部当前
指针
我绝对不会依赖于这种行为,因为PHP的后续更新可能会破坏这段代码。这只是这个特定版本的有趣巧合。如果需要下一个键,请查看替换foreach
循环。上的PHP手册中有很好的示例,请务必查看prev()
、each()
,以及“另请参阅”部分中的其他函数。。如果你打开错误报告,你会看到很多错误。额外的括号正在破坏直接变量引用$a
是一个变量,($a)
是一个导致$a
值的表达式<代码>键
要求通过引用传递变量。我不知道key
到底用它做了什么,也不知道它为什么会这样,但我会把它放在错误的、未定义的行为下。哇,如果这是故意的行为,那就太棒了。有很多次我都可以用这样的东西。但是你有什么建议吗?我应该保持这样吗?当然不。在PHP版本中,行为甚至不一致,你不能依赖这个:ok。那是个好主意。谢谢。
current key: a, next key: b
current key: b, next key: c
current key: c, next key: d
current key: d, next key: e
current key: e, next key: f
current key: f, next key: a