(jp) =
PHP には、2 つの配列を 1 つに結合する方法がいくつかあります。 使用できます array_merge
または +
オペレーター。 ただし、これら 2 つの方法には微妙な違いがありますが、知っておく価値のある違いです。
これら 2 つの方法を比較してみましょう。
array_merge($first, $second);
$first + $second;
これらが、作業している 2 つの配列であるとしましょう。
$first = [
'a',
'b',
];
$second = [
'c',
];
これは単純な array_merge
電話:
array_merge($first, $second);
[
'a',
'b',
'c',
]
一方、 +
演算子は次の結果を返します。
$first + $second;
[
'a',
'b',
]
使用中のオペランドの切り替え +
演算子、異なる結果が得られます。
$second + $first;
[
'c',
'b',
]
混乱している? 私もそうでした。
を書き出しましょう $first
と $second
インデックス付きの完全な配列。 これにより、物事がより明確になります。
$first = [
0 => 'a',
1 => 'b',
];
$second = [
0 => 'c',
];
ここまでで、何が起こっているか推測できるでしょう。 +
オペレーターのみ 追加 キーが左側のオペランドに存在しない場合、右側のオペランドの要素。 array_merge
意思 オーバーライド 既存のキー。
その定義により、次のことも判断できます。 +
既存の要素がそのまま残るため、配列を再帰的にマージするために使用することはできません。
$first = [
'A' => [
'B' => true,
'C' => true,
],
];
$second = [
'A' => [
'B' => false,
'C' => false,
],
];
$first + $second;
結果は次のとおりです。
[
'A' => [
'B' => true,
'C' => true,
],
]
使用中 array_merge
、次の結果が得られます。
[
'A' => [
'B' => false,
'C' => false,
],
]
「ちょっと待って」って言うのが聞こえる「そういうことじゃない?」 array_merge_recursive
することになっていますか?」。
ここで、残念なネーミングのケースがあります。 驚かないでください。結局のところ、これは PHP です。
見る、 array_merge
一致する要素をオーバーライドしてマージします。
array_merge_recursive
一方、両方の要素を保持し、それらを新しい配列にマージして、両方の値を保持します。
これは、前の例がどのように見えるかを示しています。 array_merge_recursive
:
[
'A' => [
'B' => [
true,
false,
],
'C' => [
true,
false,
],
],
]
複数の配列をマージするとどうなりますか? あなたはおそらく今までに結果を推測することができます:
$first = ['a'];
$second = ['b'];
$third = ['c'];
これは何ですか array_merge
結果:
array_merge($first, $second, $third)
[
'a',
'b',
'c',
]
連鎖する +
演算子も機能し、次の結果が得られます。
$first + $second + $third
[
'a',
]
このちょっとした復習で、コードに深く入り込んで配列をマージする必要があるときに、これ以上混乱しないことを願っています。
「ちょっと待って、これを行う正しい方法は何ですか?」と立ち止まって考えなければならないとき、それは認知的負担であることがわかりました. 幸いなことに、私たちは知っています!