PHP foreach使用不当导致的死循环问题

发布于 2022-09-12 13:34:20 字数 500 浏览 15 评论 0

有如下PHP的代码:

$list = [1, 2, 3];
// $v1 是引用
foreach ($list as &$v1) {
    foreach ($list as $v2) {
        echo 'loop';
    }
}

运行后一切是正常的,两次遍历后,一共输出9次loop结束程序。
但是如果在第二次遍历中,修改$list中任意元素的值:

$list = [1, 2, 3];
// $v1 是引用
foreach ($list as &$v1) {
    foreach ($list as $v2) {
        // 修改任意位置的值,不一定是0
        $list[0] = 1;
        echo 'loop';
    }
}

这段代码就会进行死循环,调试发现在死循环的情况下外面一层的foreach的key始终是0。为什么会这样呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哆啦不做梦 2022-09-19 13:34:20

foreach 和 引用 使用不正确导致的,使用完了要销毁.

享受孤独 2022-09-19 13:34:20

https://segmentfault.com/a/11...
注意:PHP不同版本foreach机制有可能不一样,比如5和7的机制就不太一样

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文