PHP beklendiği gibi diziye referans çalışmıyor

2 Cevap php

Ben aşağıdaki kodun sonucu gelen karıştı: benim beklenen sonuç alınamıyor:

$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/>';
}

Output: 30, 40, 40

Expected: 30, 40, 50

I küçük chage yaparsanız Fakat yine, çalışıyor

$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/>';
}

2 Cevap

Sen gerekir unset $DataRow Eğer bir referans olarak bunun yararlanarak hangi döngü sonra:

$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/>';
}

Sen farklı bir değişken faydalanmak ve unsetting önleyebilirsiniz .. although I would not recommend it as $DataRow is still a reference to the last array element and any overwrite of it later on will cause problems.

$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/>';
}