かなり基本的な質問がありますが、行き詰まっています。私はphpを初めて使用し、次のような配列を使用しています。
$array = array(
'one' => 1,
'two' => array('key1' => 'val1','key2' => 'val2'),
'three' => array('key1' => 'val1','key2' => 'val2'),
'four' => array('key1' => 'val1','key2' => 'val2')
);
そして、配列内の各配列(つまり、「2」、「3」、および「4」)について、「key3」=>「val3」をそれらの配列に挿入します。
私はこれを試しました:
foreach($array as $item) {
if (gettype($item) == "array") {
$item['key3'] = 'val3';
}
}
しかし、それは機能しません、そして私は理由がわかりません。さまざまなprint_rをあちこちで使用して、ループで出力すると$ itemに 'key3' => 'val3'を挿入しているように見えますが、元の配列は変更されていないようです。通常のforループも試しましたが、それも機能しませんでした。
foreach
_$item
_のコピーで機能するため、foreach
内の元の配列を変更することはできません。これを回避する1つの方法は、_&
_演算子を使用することです。
_foreach($array as &$item) {
if (is_array($item)) {
$item['key3'] = 'val3';
}
}
_
もう1つのよりエレガントな方法は、 array_walk()
を使用することです。
_array_walk($array, function (&$v, $k) {
if (is_array($v)) {
$v['key3'] = 'val3';
}
});
_
この例は、クロージャーが導入されたPHP 5.3から機能します。
次のようなforeachuseキーでループしている間:
foreach($array as $key => $item){
$array[$key]['newElement'] = "newValue";
}
PHPには、変数が配列であるかどうかをチェックする関数is_array()
があります。これを使って:
if (is_array($item)) { ...