5

私は2次元配列を持っています:

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

これは機能しません。私は何を間違っているのですか、そしてどうすればこれを機能させることができますか?

4

3 に答える 3

9

PHP では、配列とプリミティブは値によって渡されます (ただし、オブジェクトは参照によって渡されます)。ループ内でこれを克服する 1 つの方法は、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)
  }
  ...
}
于 2012-10-31T00:17:42.633 に答える
3
$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
    )
);

foreach($test as $key => $val)
    $test[$key]['d'] = 4;

print_r($test);
于 2012-10-31T00:18:46.600 に答える
0

PHP 関数とコールバックを利用できます。

array_walk($test, function ( & $value) {                                                                                                                                                            
     $value['d'] = 4;
}); 
于 2016-02-23T17:53:09.897 に答える