2012-09-29 62 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"; 
}