PHP:如何从foreach循环内部修改数组(通过引用)

时间:2012-09-29 12:56:35

标签: php arrays multidimensional-array

  

可能重复:
  How to modify an array's values by a foreach loop?

为什么这不起作用?

$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”;

4 个答案:

答案 0 :(得分:4)

您正在修改$ item,这是来自$ user_list_array的相关条目的副本

<强>或者: (修改原始数组)

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

(参考)

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

答案 1 :(得分:2)

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

添加&amp;在$ item将通过引用传递数组之前,这意味着您将保存对它所做的任何修改。

答案 2 :(得分: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"; 
} 

答案 3 :(得分:0)

您应该修改原始数组,而不是循环创建的tmp变量$item。你可以这样做

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