博客已迁移至https://drivingc.com,本站停止更新.

一个php小问题

代码如下,一个数组被循环两次,第一次用了引用,第二次循环echo数组中的值。

<?php

$a = ['a','b','c','d'];
foreach ($a as &$val) {
}

foreach ($a as $val) {
    echo $val;
}

预想中应该输出abcd才对,可是实际运行输出为abcc。
这是一个小坑,不知道为什么php在遍历时用了引用,$val没有在遍历结束后销毁。
比如,在遍历后打印$val还有值

<?php

$a = ['a','b','c','d'];
foreach ($a as &$val) {
}
echo $val;     //输出为d

这是如果进行第二次遍历,foreach会把数组中的值依次赋值给$val(注意这时候$val是引用,指向数组中的第四个值),也就是说第二次遍历会依次把数组中的值赋值给数组中的最后一个值。这样的结果就是最后两个值是一样的。

没去深究为什么会这样,以后注意每次遍历用引用之后将$val变量unset()掉。

本文链接:https://kupposhadow.com/p/5934cbcfc836110b120425b1
本站采用「署名 4.0 国际(CC BY 4.0)」创作共享协议。只要在使用时署名,那么使用者可以对本站所有原创内容进行转载、二次创作、商业性使用。
这篇文章还没有评论