foreach ($myarray as &$v)
$v['koko']='lala';
This allows easy changes to the actual table by using references and not acting on a copy.
- but -
If you do this:
$myarray=array(array('a'=>1), array('a'=>2), array('a'=>3));
foreach ($myarray as &$v)
$v['b']=1;
foreach ($myarray as $v);
print_r($myarray);
You manage to remove the last element of $myarray (!!!). This is the output:
Array
(
[0] => Array
(
[a] => 1
[b] => 1
)
[1] => Array
(
[a] => 2
[b] => 1
)
[2] => Array
(
[a] => 2
[b] => 1
)
)
Now, if you change the code to:
$myarray=array(array('a'=>1), array('a'=>2), array('a'=>3));
foreach ($myarray as &$v)
$v['b']=1;
foreach ($myarray as $v2);
print_r($myarray);
The bug is gone. The output is correct:
Array
(
[0] => Array
(
[a] => 1
[b] => 1
)
[1] => Array
(
[a] => 2
[b] => 1
)
[2] => Array
(
[a] => 3
[b] => 1
)
)
To my knowledge, this happens because $v is kept as a reference to the last element when the first foreach is finished. Then, when the second foreach is ran, some assignments are performed to $v, destroying its last element.