谁能分析下这个BUG的发生逻辑,语言PHP

遍历后,$elements 值被修改,最后的值被替换为 2

        $elements = [1,2,3];
        foreach ($elements as &$element) {
            echo json_encode($element)."\n";
        }
        echo json_encode($elements)."\n";

        foreach ($elements as $element) {
            echo json_encode($element)."\n";
        }
        echo json_encode($elements)."\n";

// 输出
/**
1
2
3
[1,2,3]
1
2
2
[1,2,2]
**/

看一下这个链接:
https://www.cnblogs.com/caiji/p/9293254.html

第二次循环前加个 unset($element); 就正常了。

        $elements = [1,2,3];
        $element = '';
        foreach ($elements as &$element) {
            echo json_encode($element)."\n";
        }
        echo json_encode($elements)."\n";
        unset($element);
        foreach ($elements as $element) {
            echo json_encode($element)."\n";
        }
        echo json_encode($elements)."\n";