2012-09-29 93 views
1

可能重複:
How to modify an array's values by a foreach loop?PHP:如何修改陣列從內部foreach循環(參考)

爲什麼不這項工作?

$user_list_array = array(
    1 => array("first_name" => "Jim"), 
    2 => array("first_name" => "Bob") 
) 

foreach ($user_list_array as $item) { 
    echo $item["first_name"]; 
    $item["last_name"] = "test"; 
} 

var_dump($user_list_array); 

我可以得到「first_name」,但不能添加「last_name」;

+3

因爲你只是修改在foreach循環內創建的$ item變量,所以你實際上並沒有修改原始數組。 – user1071461

+0

啊。有沒有一種優雅的方式來正確地做到這一點? – emersonthis

+0

我必須編號一個大的用戶列表。 – emersonthis

回答

4

你修改$項目,這是相關內容的副本來回$ user_list_array

之一: (修改原始數組)

foreach ($user_list_array as $key => $item) { 
    echo $item["first_name"]; 
    $user_list_array[$key]["last_name"] = "test"; 
} 

OR: (通過參考)

foreach ($user_list_array as &$item) { 
    echo $item["first_name"]; 
    $item["last_name"] = "test"; 
} 
unset($item); 
+0

你會不會在兩者之間的表現上有一個基準? –

+0

不,我沒有基準,雖然很容易運行。據猜測,我認爲這將是「通過引用」選項,因爲它不需要在foreach中處理關鍵字和值;但這只是一個猜測 –

+0

@MarkBaker不知道確切的統計數據,你認爲這樣循環超過1000個用戶是有問題的嗎?我知道foreach循環可以減慢速度,但我不知道如何做到這一點。 – emersonthis

2
foreach ($user_list_array as &$item) { 
    echo $item["first_name"]; 
    $item["last_name"] = "test"; 
} 

$項目之前添加&將通過引用傳遞數組,這意味着你所做的任何修改將被保存。

0

它沒有工作,因爲你沒有修改實際的數組,這應該做的伎倆。

$user_list_array = array(
    1 => array("first_name" => "Jim"), 
    2 => array("first_name" => "Bob") 
) 

foreach ($user_list_array as $id => $item) { 
    echo $item["first_name"]; 
    $user_list_array[$id]["last_name"] = "test"; 
} 
0

您應該修改原始數組,而不是循環創建的tmp變量$item。你可以這樣做

foreach ($user_list_array as $key = $val) { 
    echo $val["first_name"]; 
    $user_list_array[$key]["last_name"] = "test"; 
}