需要帮助调试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里面没有任何意义,它只会增加不必要的开销。