15

かなり基本的な質問がありますが、行き詰まっています。私はphpにかなり慣れていないので、次のような配列を持っています:

$array = array(
    'one' => 1,
    'two' => array('key1' => 'val1','key2' => 'val2'),
    'three' => array('key1' => 'val1','key2' => 'val2'),
    'four' => array('key1' => 'val1','key2' => 'val2')
);

配列内の各配列 (つまり、'two、'three'、'four') について、'key3' => 'val3' をそれらの配列に挿入します。

私はこれを試しました:

foreach($array as $item) {
    if (gettype($item) == "array") {
        $item['key3'] = 'val3';
    }
}

しかし、それは機能しません。その理由はわかりません。あちこちでさまざまな print_r を使用すると、ループで出力すると $item に 'key3' => 'val3' が挿入されるように見えますが、元の配列は変更されていないようです。通常の for ループも試しましたが、うまくいきませんでした。

4

3 に答える 3

24

foreachのコピーで動作する$itemため、 内の元の配列を変更することはできませんforeach。これを回避する 1 つの方法は、&演算子を使用することです。

foreach($array as &$item) {
    if (is_array($item)) {
        $item['key3'] = 'val3';
    }
}

別のよりエレガントな方法は、次を使用することarray_walk()です。

array_walk($array, function (&$v, $k) { 
    if (is_array($v)) {
        $v['key3'] = 'val3';
    }
});

この例は、クロージャが導入された PHP 5.3 以降で動作します。

于 2013-05-10T22:34:34.173 に答える
0

foreach でループしながら、次のようなキーを使用します。

foreach($array as $key => $item){

    $array[$key]['newElement'] = "newValue";

}
于 2016-01-28T11:10:32.270 に答える
0

PHP には、変数が配列かどうかをチェックする関数がありますis_array()。これを使って:

if (is_array($item)) { ...
于 2013-05-10T22:33:59.657 に答える