Php 使用foreach更新数组中的数组

Php 使用foreach更新数组中的数组,php,arrays,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'), ); 我需要向所有这些数组

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

比如,

$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';
}
是否需要创建新阵列并将所有更新的阵列添加回新阵列?

使用引用:

foreach($data as &$onearray) {
     $onearray['alive'] = 'true';
}
unset($onearray)
然后清理引用,这样进一步的代码就不会把它弄乱


以便能够直接修改循环中的数组元素 在$value前面加上&。在这种情况下,该值将由 参考资料


有关更多信息,请参阅foreach参考:

是否尝试使用数据数组键?像这样:

foreach($data as $key => $onearray){
     $data[$key]['alive'] = 'true';
}
(请注意,$onearray从未被使用)

更快的是:

for($i = 0; $i < count($data); $i++) {
    $data[$i]['alive'] = 'true';
}
for($i=0;$i
使用内置函数-将用户函数应用于阵列的每个成员

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

如果($i=0;$c=count($data);$i<$c;$i++){
,速度会更快,但时间差会非常小,所以这无关紧要。你完全正确。收益不多。但是,在不需要foreach时,尝试并习惯使用for循环是很好的(因为foreach运行在数组的“副本”上,因此会占用更多内存)Sry,但此解决方案非常糟糕。始终使用hashmap查找。使用array\u walk或references来让代码及时运行。您不应该使用此示例。我在此处发布了四种不同方法(1000000次迭代)的小型基准测试事实证明,通过引用传递是最快的,而在这个答案的第二部分中提供的解决方案是最慢的。请看结果。然后我站起来更正,并学习了!谢谢。我想补充一点,对于使用引用的新手程序员来说,可能更难理解(尽管这个示例很简单),尤其是当一个人忘记取消设置最后一个引用并在以后使用变量时。你不认为吗?也很糟糕可能不是描述我答案的最好方式,有点苛刻,不是吗?
Before ...:
d. lemon
a. orange
b. banana
c. apple
... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple