実現したいこと
多次元配列の内側の配列にも再帰的に結合を行いたい。
下記の配列$status
と$orders_count
という2次元の連想配列を、$result
という配列のように結合したい。
一つ目の配列
$status = [
[
"status" => 1,
"name" => "ステータス1",
],
[
"status" => 2,
"name" => "ステータス2",
],
[
"status" => 3,
"name" => "ステータス3",
]
];
二つ目の配列
$orders_count = [
[
"orders_count" => 40,
],
[
"orders_count" => 30,
],
[
"orders_count" => 20,
]
]
欲しい結合結果
$result = [
[
"status" => 1,
"name" => "ステータス1",
"orders_count" => 40,
],
[
"status" => 2,
"name" => "ステータス2",
"orders_count" => 30,
],
[
"status" => 3,
"name" => "ステータス3",
"orders_count" => 20,
]
]
array_replace_recursiveで対応
array_replace_recursive()という関数を使って結合する。
$result = array_replace_recursive($status, $orders_count);
第一引数に指定した配列に対して、第二引数の配列が下記の条件で結合される。
- 最初の配列のキーと同じキーが2番目の配列にあれば、2番目の配列の値が最初の配列の値を上書きする
- 2番目の配列に存在するキーが最初の配列に存在しなければ、 そのキーが新たに最初の配列内に作られる
- 置き換え用の配列が複数渡された場合は渡した順に処理を行い、 後から渡した配列の値のほうが優先される
今回はキーの重複はないので、1番目の配列に2番目の配列の中身が追加される。
参考
PHP公式リファレンス:array_replace_recursive