Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
foreach循环中的php key()异常行为或获取foreach循环中的下一个键_Php_Arrays_Behavior_Next - Fatal编程技术网

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