使用foreach更新数组中的数组

时间:2013-11-16 09:09:41

标签: php arrays

我正在尝试更新数组,但数组包含数组。

例如,

$data = array(
    array('name'=>'John','age'=>'19','alive'=>'false'),
    array('name'=>'Bob','age'=>'32','alive'=>'false'),  
    array('name'=>'Kate','age'=>'22','alive'=>'false'), 

);

我需要为所有这些数组添加另一个元素。

我尝试过使用foreach

foreach($data as $onearray){
     $onearray['alive'] = 'true';
}

我是否需要创建一个新阵列并将所有更新的阵列添加回新阵列?

3 个答案:

答案 0 :(得分:7)

您是否尝试使用数据阵列密钥?像这样:

foreach($data as $key => $onearray){
     $data[$key]['alive'] = 'true';
}

(注意$ onearray永远不会被使用)

更快的是:

for($i = 0; $i < count($data); $i++) {
    $data[$i]['alive'] = 'true';
}

答案 1 :(得分:5)

使用引用:

foreach($data as &$onearray) {
     $onearray['alive'] = 'true';
}
unset($onearray)

然后清理引用,所以进一步的代码不会弄乱它


  

为了能够直接修改循环内的数组元素   使用&amp;前面的$ value。在这种情况下,值将由   参考

请参阅foreach-reference了解更多信息:http://us2.php.net/manual/en/control-structures.foreach.php

答案 2 :(得分:1)

使用内置函数array_walk - 将用户函数应用于数组的每个成员

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

function test_alter(&$item1, $key, $prefix)
{
    $item1 = "$prefix: $item1";
}

function test_print($item2, $key)
{
    echo "$key. $item2<br />\n";
}

echo "Before ...:\n";
array_walk($fruits, 'test_print');

array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";

array_walk($fruits, 'test_print');
?>

输出

Before ...:
d. lemon
a. orange
b. banana
c. apple
... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple