PHP foreach 语句引用 : unexpected behaviour when reusing iterator

标签 php arrays foreach pass-by-reference

此代码产生意外输出:

$array=str_split("abcde");
foreach($array as &$item)
    echo $item;

echo "\n";
foreach($array as $item)
    echo $item;

输出:

abcde
abcdd

如果在第二个循环中使用 &$item 一切正常。

我不明白这段代码会如何影响$array 的内容。我可以认为隐式 unset($header) 会删除最后一行,但是双 dd 来自哪里?

最佳答案

这可以帮助:

$array=str_split("abcde");
foreach($array as &$item)
    echo $item;

var_dump($array);

echo "\n";
foreach($array as $item) {
    var_dump($array);
    echo $item;
}

正如您在最后一次迭代后看到的那样,$item 引用了 $array 的第 4 个元素 (e)。

之后,您遍历数组并将第 4 个元素更改为当前元素。因此,在第二个循环的第一次迭代之后,它将是 abcda,等等到 abcdd。在最后一次迭代中,您将第 4 个元素更改为第 4 个,如 d 更改为 d

关于PHP foreach 语句引用 : unexpected behaviour when reusing iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287970/

相关文章:

c - Main 无法正确调用函数 "makeArray"

java - 在表中显示从数据库中检索到的值

php - 使用多部分实体android在服务器上上传大文件

php - JS/jQuery/PHP : trying to generate an URL using PHP variables

PHP代码mysql查询不起作用

java - 如何将 "add parsed string that used filter"转换为字符串 ArrayList

javascript - Cakephp Ajax,使用 Js Helper 获取文本字段的值

java - 计算字符串中的字母 Java

javascript 在输入框被勾选时检查复选框 - 复选框数组 []

javascript - PHP for-each 循环不起作用?