※ ChatGPTを利用し、要約された質問です(原文:2つの配列を再帰的に上書きでマージしたい)
配列を再帰的に上書きでマージする方法と注意点
このQ&Aのポイント
配列を再帰的に上書きでマージする方法を教えてください。元の配列を書き換えずに上書きでマージしたいです。
array_merge_recursiveでは後の値が元の値を上書きせずに追加されますが、上書きでマージする方法はありますか?
特定の配列から別の配列へ要素を再帰的にマージする方法を教えてください。
array_merge_recursive では配列が同じ数値キーを有している場合、 後の値は元の値を上書せず、追加されます。
これを上書されるようにしたいのですが、どのようにすれば良いでしょうか?
$arr3 = mymerge($arr1,$arr2);
のような形で$arr3が得られると助かります。
$arr1,$arr2は再利用したいので書き換えられないようにしたいです。
次のような物をネット上で見つけたのですが、これでは$arr1が書き換えられてしまいます。
function mymerge(&$arr1,$arr2){
foreach ($arr2 as $key=>$value){
if(is_array($value)){
mymerge(&$arr1[$key],$value);
}else{
$arr1[$key]=$value;
}
}
return $arr1;
}
次のようにすれば良いのかもしれませんが、1つのfunctionでできると助かります。
$temp1 = array();
$temp2 = mymerge($temp1,$arr1);
$arr3 = mymerge($temp2,$arr2);
いくら考えても分からないので、すみませんがどなたか教えてください。_○_
お礼
さらに実用的になりました。重ねてお礼申し上げます!
補足
『$arr2の値が配列ではなかった場合で且つ$arr1が配列だった場合は、$arr1のインデックスキーが0のところに値を貼り付ける』との事ですが、[0]の値のみ書き換えられるのではなくすべて書き換えられた方が希望に合った動作になりました。 (「array_merge_recursiveに準じた動作で上書き」という意味としては間違っているのかもしれませんが) <?php function mymerge($arr1, $arr2){ foreach($arr2 as $key=>$value){ if(!is_array($arr1)){ $arr1 = array($arr1); } if(is_array($value)){ $arr1[$key] = mymerge($arr1[$key], $value); }else{ $arr1[$key] = $value; } } return $arr1; } ?> いずれにせよありがとうございました。