2011-12-18 22 views
5

Tôi muốn thêm một giá trị cho một mảng trong khi foreaching nó:php foreach trên một mảng và phân công của mảng này

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

Các printr đầu tiên là ok nhưng đối tượng bổ sung disapear khi tôi rời khỏi vòng lặp in ant mảng.

Tôi đoán đây là hành vi bình thường, cách tốt nhất để làm việc với "tính năng" này là gì?

+0

có thể trùng lặp [giá trị chèn php vào mảng mảng sử dụng foreach] (http://stackoverflow.com/questions/16491704/php-insert-value-into-array-of-arrays-using-foreach) – kapa

Trả lời

11

Chỉ cần gọi $cell bằng cách tham chiếu như thế này:

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

Và nó phải được giữ nguyên giá trị. Passing by reference.

+0

Có! cảm ơn bạn ! –

4

Khi bạn lặp qua mảng, $cell là bản sao của giá trị, không phải là tham chiếu để thay đổi nó sẽ không ảnh hưởng đến giá trị trong mảng.

Bạn có thể nên sử dụng & để làm cho $cell một tài liệu tham khảo:

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

Hoặc truy cập vào các mục mảng trực tiếp sử dụng một chỉ mục.

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); 
Các vấn đề liên quan