I want to add a value to an array while foreaching it :
foreach ($array as $cell) {
if ($cell["type"] == "type_list") {
$cell["list"] = $anObject;
error_log(print_r($cell, TRUE), 0);
}
error_log(print_r($array, TRUE), 0);
The first printr is ok but the object added disapear when I leave the loop ant print the array.
I guess this is a normal behaviour, what is the best way to work around this "feature" ?
Just call $cell
by reference like this:
foreach($array as &$cell) {...}
And it should retain the value. Passing by reference.
When you iterate over the array, $cell
is a copy of the value, not a reference so changing it will not effect the value in the array.
You should either use &
to make the $cell
a reference:
foreach ($array as &$cell) {
if ($cell["type"] == "type_list") {
$cell["list"] = $anObject;
error_log(print_r($cell, TRUE), 0);
}
error_log(print_r($array, TRUE), 0);
Or access the array items directly using an index.
foreach ($array as $i => $cell) {
if ($array[$i]["type"] == "type_list") {
$array[$i]["list"] = $anObject;
error_log(print_r($array[$i], TRUE), 0);
}
error_log(print_r($array, TRUE), 0);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With