2011-12-18 16 views
5

voglio aggiungere un valore ad un array mentre foreaching esso:php foreach su un array e l'assegnazione di questo array

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); 

La prima printr è ok ma l'oggetto disapear aggiunto quando lascio la stampa formica ciclo l'array.

Immagino che questo sia un comportamento normale, qual è il modo migliore per aggirare questa "caratteristica"?

+0

possibile duplicato [valore inserto php in array di array utilizzando foreach] (http://stackoverflow.com/questions/16491704/php-insert-value-into-array-of-arrays-using-foreach) – kapa

risposta

11

Basta chiamare $cell facendo riferimento in questo modo:

foreach($array as &$cell) {...} 

E dovrebbe mantenere il valore. Passing by reference.

+0

Sì! grazie ! –

4

Quando si esegue l'iterazione sull'array, $cell è una copia del valore, non un riferimento, pertanto la modifica non influirà sul valore dell'array.

Si dovrebbe usare sia & per rendere il $cell riferimento:

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); 

O accedere agli elementi di matrice direttamente utilizzando un indice.

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);