2011-12-18 12 views
5

chcę dodać wartość do tablicy podczas foreaching go:php foreach na tablicy oraz przypisanie tej tablicy

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

Pierwszy printr jest ok, ale obiekt dodany disapear kiedy opuszczają pętli ant drukuj tablica.

Sądzę, że to normalne zachowanie, jaki jest najlepszy sposób obejścia tej "funkcji"?

+0

możliwe duplikat [php wartości wkładki w tablicy macierzy z wykorzystaniem foreach] (http://stackoverflow.com/questions/16491704/php-insert-value-into-array-of-arrays-using-foreach) – kapa

Odpowiedz

11

Wystarczy zadzwonić $cell przez odniesienie tak:

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

I powinien zachować wartość. Passing by reference.

+0

Tak! Dziękuję Ci ! –

4

Po przejściu przez tablicę, $cell jest kopią wartości, a nie odniesienia, więc zmiana nie wpłynie na wartość w tablicy.

Należy użyć & wyrównującego $cell odniesienie:

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

lub dostępu elementy tablicy bezpośrednio za pomocą indeksu.

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