2011-12-18 17 views
5

Quiero añadir un valor a un array mientras foreaching que:php foreach sobre una matriz y asignación de esta matriz

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 primera printr está bien, pero el objeto añadió disapear cuando deje la impresión de hormigas bucle la matriz

Supongo que este es un comportamiento normal, ¿cuál es la mejor manera de evitar esta "función"?

+0

posible duplicado de [valor de inserción php en matriz de matrices utilizando foreach] (http://stackoverflow.com/questions/16491704/php-insert-value-into-array-of-arrays-using-foreach) – kapa

Respuesta

11

Sólo tiene que llamar $cell por referencia así:

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

Y debe conservar el valor. Passing by reference.

+0

¡Sí! gracias ! –

4

Cuando itera sobre la matriz, $cell es una copia del valor, no una referencia, por lo que cambiarla no afectará el valor de la matriz.

debes usar & para hacer el $cell una referencia:

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 acceder a los elementos de la matriz directamente a través de un índice.

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