配列を配列で置き換えたい場合というのがあります。
例えば、次のような、ある人の体重(weight)、身長(height)のデータを表す配列があったとします。
1 2 3 4 |
$arr1 = array( 'weight' => 60, 'height' => 170, ); |
そしてこの人は、正月に帰省した際、おいしいものを食べすぎて体重が増加してしまった、とします。
年末など、親戚がたくさん集まるようなイベントがあると、ついつい食べ過ぎて危険ではありますね。
さて、この場合の更新データは、次のような配列となります。
1 2 3 4 |
$arr2 = array( 'weight' => 80, 'height' => 170, ); |
正月前の体重、身長のデータを正月後の値で更新したい場合、次のようなコードになります。
1 2 3 4 5 6 7 |
foreach($arr1 as $key=>$val){ foreach($arr2 as $kkey=>$vval){ if($kkey == $key){ $arr1[$key] = $vval; } } } |
foreachで元データの配列をループさせながら、内側で更新データの配列をループさせ、その両者のキーが同じデータがあれば、元データが上書きされる、という処理ですね。
このコードもPHPの5.3.0以降の場合は、次のように簡潔に記述することが可能になります。
1 |
$arr1 = array_replace($arr1, $arr2); |
この関数、array_replaceの定義は以下のようになります。
1 |
array array_replace ( array $array1 , array $array2 [, array $... ] ) |
実行することで、第一引数の配列が、第二引数以降の配列によって上書きされた配列を返します。
第二引数以降というのは、第三引数、第四引数…も指定可能ということで、次のようなことも可能です。
正月後、体重が増えてしまいガッカリしていたものの、さらにその後の健康診断に行ったら身長が175cmになっていた、というケース。
1 2 3 4 5 6 7 |
// 健康診断後わかったデータ $arr3 = array( 'weight' => 80, 'height' => 175, ); $arr1 = array_replace($arr1, $arr2, $arr3); var_dump($arr1); |
実行結果は次のようになります。
1 2 3 4 5 6 |
array(2) { ["weight"]=> int(80) ["height"]=> int(175) } |
第二引数以降の、第一引数への上書きの優先度については、上記の例でもわかるように、後に指定した引数が優先される仕組みになっています。
上記の例では、第二引数よりも第三引数が優先されるということです。
今回は、配列を配列で上書きする関数、array_replaceを紹介しました。いつもforeachで行っている処理を簡潔に記述することが可能になりますので、ぜひ使ってみてください。