gpt4 book ai didi

php - 对数组的引用在 PHP 中未按预期工作

转载 作者:可可西里 更新时间:2023-10-31 23:12:03 25 4
gpt4 key购买 nike

我对以下代码的结果感到困惑:我得不到预期的结果:

$arrX = array('a'=>array('val'=>10),'b'=>array('val'=>20), 'c'=>array('val'=>30));
foreach( $arrX as &$DataRow )
{
$DataRow['val'] = $DataRow['val'] + 20;
}
foreach( $arrX as $DataRow )
{
echo '<br />val: '.$DataRow['val'].'<br/>';
}

输出:30, 40, 40

预期:30, 40, 50

但是如果我做一些小改动,它就可以正常工作,

$arrX = array('a'=>array('val'=>10),'b'=>array('val'=>20), 'c'=>array('val'=>30));
foreach( $arrX as &$DataRow )
{
$DataRow['val'] = $DataRow['val'] + 20;
}
foreach( $arrX as &$DataRow )
{
echo '<br />val: '.$DataRow['val'].'<br/>';
}

最佳答案

在将它用作引用的循环之后,您需要取消设置 $DataRow:

$arrX=array('a'=>array('val'=>10),'b'=>array('val'=>20), 'c'=>array('val'=>30));
foreach( $arrX as &$DataRow ) {
$DataRow['val'] = $DataRow['val'] + 20;
}

// at this point $DataRow is the reference to the last element of the array.
// ensure that following writes to $DataRow will not modify the last array ele.
unset($DataRow);

foreach( $arrX as $DataRow ) {
echo '<br />val: '.$DataRow['val'].'<br/>';
}

您可以使用不同的变量并避免取消设置..虽然我不推荐它,因为 $DataRow 仍然是对最后一个数组元素的引用,以后对它的任何覆盖都会导致问题。

$arrX=array('a'=>array('val'=>10),'b'=>array('val'=>20), 'c'=>array('val'=>30));
foreach( $arrX as &$DataRow ) {
$DataRow['val'] = $DataRow['val'] + 20;
}

foreach( $arrX as $foo) { // using a different variable.
echo '<br />val: '.$foo['val'].'<br/>';
}

关于php - 对数组的引用在 PHP 中未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com