Вам необходимо сбросить $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/>';
}