Php 无法将新字段添加到foreach内的数组中

Php 无法将新字段添加到foreach内的数组中,php,multidimensional-array,Php,Multidimensional Array,我有一个二维数组: $test = array( "foo" => array( 'a' => 1, 'b' => 2, 'c' => 3 ), "bar" => array( 'a' => 1, 'b' => 2, 'c' => 3 ), "baz" => array( 'a' =>

我有一个二维数组:

$test = array(
    "foo" => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    ),
    "bar" => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    ),
    "baz" => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    )
);
我想在外部数组的每个元素中添加一个名为
'd'
的字段,该字段的值为
4
,以便生成的数组成为:

array(
    "foo" => array(
        'a' => 1,
        'b' => 2,
        'c' => 3,
        'd' => 4
    ),
    "bar" => array(
        'a' => 1,
        'b' => 2,
        'c' => 3,
        'd' => 4
    ),
    "baz" => array(
        'a' => 1,
        'b' => 2,
        'c' => 3,
        'd' => 4
    )
)
我试过这个:

foreach ( $test as $elem ) 
{
    $elem['d'] = 4;
}

这不管用。我做错了什么?我如何才能做到这一点?

数组和原语在PHP中是按值传递的(尽管对象是按引用传递的)。在
foreach
循环中克服此问题的一种方法是通过循环中的引用访问子阵列:

// Call $elem by reference with &
foreach ( $test as &$elem ) {
    $elem['d'] = 4;
}

print_r($test);
array(3) {
  ["foo"]=>
  array(4) {
    ["a"]=>
    int(1)
    ["b"]=>
    int(2)
    ["c"]=>
    int(3)
    ["d"]=>
    int(4)
  }
  ...
}

您可以利用php函数和回调:

array_walk($test, function ( & $value) {                                                                                                                                                            
     $value['d'] = 4;
}); 

呵呵。真有趣,我今天早些时候怎么问的。因此,PHP在默认情况下是“按值传递”,而“按引用传递”必须通过
&
明确实施。PHP提供了这两种方法,这很好,JavaScript没有,也就是说,它只是通过引用传递。@ŠimeVidas对象是通过引用传递的。数组和原语是按默认值传递的问题是,我的实际代码是
foreach($key=>$val){
,所以我不得不写
$page[“data”][“stuff”][$key]
很多次,这对我来说太重复了。
array_walk($test, function ( & $value) {                                                                                                                                                            
     $value['d'] = 4;
});