关于&符号

        $data = [1, 2, 3];
        foreach ($data as &$value) {
            $value = $value * 2;
        }
        dump($data);
        dump('---------------------');
        foreach ($data as $value) {
            dump($value);
        }

关于&符号

为什么第二个foreach 会输出244 ,而不是246.

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

原因就如1楼所解释,解决方法是引用使用完要unset掉:

 $data = [1, 2, 3];
 foreach ($data as &$value) {
    $value = $value * 2;
 }
unset($value)
1周前 评论
_杭城浪子 1周前

原因就如 1 楼所解释,下面是我按自己的理解组织的语言说明:
第一次 foreach 结束之后 $value 的地址指向了 $data 的最后一个元素的地址,也就是 $data[2] ,所以第二次执行 foreach 时相当于在给 $data[2] 重新赋值。

$data = [1, 2, 3];
foreach ($data as &$value) {
    $value = $value * 2;
}
dump($data);
dump('---------------------');
// 此时 $value 的地址指向 $data[2],打印 $data 的结果是 [0 => 2, 1 => 4, 2 => 6]
foreach ($data as $value) {
    // 这里的循环会依次将 $data 的元素赋值给 $value
    // 刚才提到当前 $value 的地址指向 $data[2],也就是循环时会将 $data[2] 进行重新赋值
    dump($data); // 这里可以将 $data 打印出来看,依次会是
    //  [0 => 2, 1 => 4, 2 => 2]  [0 => 2, 1 => 4, 2 => 4]  [0 => 2, 1 => 4, 2 => 4]
    dump($value);
}

file

1周前 评论

$data = [1, 2, 3];
foreach ($data as &$value) {
$value = $value * 2;
}
unset($value);
dump($data);
dump('---------------------');
foreach ($data as $value) {
dump($value);
}
需要unset一下;
如果不unset,&是引用,和指针类似,php底层
第三次循环你的指针没有释放,还指向2,所以还是244;unset就是246了

4天前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!