array_merge_recursive で同じキーと値を持つ多次元配列をマージして上書きする方法は? 以下のような2つの配列があるとします:
$arr1 = array(
// OVERWRITE
array('prop_id' => 1, 'prop_value' => 'batman'),
array('prop_id' => 2, 'prop_value' => 'ironman'),
// NOT OVERWRITE
array('prop_id' => 5, 'prop_value' => 'wonderwoman'),
);
$arr2 = array(
array('prop_id' => 1, 'prop_value' => 'robin'),
array('prop_id' => 2, 'prop_value' => 'superman'),
array('prop_id' => 4, 'prop_value' => 'catwoman'),
);
マージして新しい値で上書きしたい(ルールは上書きしない同じ値の比較キーです)、期待される結果は
$result = array_merge_overwrite($arr1, $arr2, array('prop_id') /* Comparison Key */);
$result = array(
array('prop_id' => 1 /* Comparison Key */, 'prop_value' => 'robin' /* Comparison value */),
array('prop_id' => 2, 'prop_value' => 'superman'),
array('prop_id' => 4, 'prop_value' => 'catwoman'),
array('prop_id' => 5, 'prop_value' => 'wonderwoman'),
);
array_merge_recursive を使用すると、上書きされずに追加されます。以下のように array_replace_recursive を試します。
$result = array_replace_recursive(
array(
1 => array('prop_id' => 1, 'prop_value' => 'batman'),
2 => array('prop_id' => 2, 'prop_value' => 'ironman'),
5 => array('prop_id' => 5, 'prop_value' => 'wonderwoman'),
),
array(
1 => array('prop_id' => 1, 'prop_value' => 'robin'),
2 => array('prop_id' => 2, 'prop_value' => 'superman'),
4 => array('prop_id' => 4, 'prop_value' => 'catwoman'),
),
);
それは機能しますが、私のコードは厄介で汚いように見えます。私よりも良い解決策