Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助调试PHP代码吗_Php - Fatal编程技术网

需要帮助调试PHP代码吗

需要帮助调试PHP代码吗,php,Php,我有如下代码: <?php $a = [1,2,3]; foreach($a as &$val) { $val = $val + 1; } foreach($a as $val) { $val = $val - 1; } var_dump($a); // output 2,3,1 ?> 我将输出2,3,1作为最终数组,而不是2,3,4,我无法理解php是如何解释这段代码的,有

我有如下代码:

 <?php
    $a = [1,2,3];
    foreach($a as &$val) {
        $val = $val + 1;
    }

    foreach($a as $val) {
        $val = $val - 1;
    }

    var_dump($a);

    // output 2,3,1
?>


我将输出2,3,1作为最终数组,而不是2,3,4,我无法理解php是如何解释这段代码的,有人能帮助我理解这段代码是如何进行的吗?

您需要在第一个
foreach()
中的引用上调用
unset()
,以获得预期的行为:

$a = [1, 2, 3];

foreach($a as &$val) 
{
    $val = $val + 1;
}

unset($val);

// $a = [2, 3, 4];
有关此信息,请参见中的注释:

$value
的引用和最后一个数组元素即使在 foreach循环。建议通过
unset()
将其销毁


@AlonEitan不,第一个通过引用应该创建
2,3,4
,并且不受第二个
foreach
@BenM-Oh的影响。感谢您让我知道通过引用访问
foreach
的循环变量意味着查找故障。别这样!您的问题的答案在一个红色的大警告框中解释。我想问题是为什么输出是[2,3,1]而不是[2,3,4],没有
未设置($value)
$value
仍然是对最后一项的引用:$arr[3]。它在文档中,伙计们。
unset()
应该在foreach之后调用,而不是在它里面。@rob006在这个例子中它实际上是不相关的:@BenM结果可能是相同的,但是将它放在foreach里面没有任何意义,它只会增加不必要的开销。