PHP では、配列は多くのシナリオで使用できる非常に重要なデータ構造です。 2 次元配列もその 1 つで、通常はテーブルや行列などのデータを格納するために使用されます。実際の開発では、2 つ以上の 2 次元配列を新しい 2 次元配列にマージする必要がある状況に遭遇することがあります。ただし、PHP 独自の array_merge
関数を直接使用してマージすると、マージされたキーの値が変わってしまうという問題が発生します。そこで、キー値を変更せずに 2 次元配列をマージする方法について説明します。
PHP では、2 次元配列は実際には複数の 1 次元配列を含む配列です。各 1 次元配列は、複数のキーと値のペアを格納できるサブ配列です。たとえば、次は 2 つのサブ配列を含む 2 次元配列です:
$array = [ [ 'name' => 'John', 'age' => 25, ], [ 'name' => 'Mary', 'age' => 30, ], ];
各サブ配列が個人の情報を表すことがわかります。ここで、name
と age
がキーで、対応する値はその人の名前と年齢です。実際の開発では、この構造のデータに対して、配列のソート、フィルタリング、マージなど多くの操作を実行する必要があります。
PHP では配列を結合する方法が多数ありますが、その中で array_merge
関数を使用するのが一般的な方法です。この関数は複数の配列を新しい配列にマージでき、マージされたキー値は自動的に並べ替えられます。以下は、array_merge
関数を使用して 2 つの 2 次元配列をマージする例です。
$array1 = [ [ 'name' => 'John', 'age' => 25, ], ]; $array2 = [ [ 'name' => 'Mary', 'age' => 30, ], ]; $array = array_merge($array1, $array2); var_dump($array);
出力結果は次のとおりです。
array(2) { [0]=> array(2) { ["name"]=> string(4) "John" ["age"]=> int(25) } [1]=> array(2) { ["name"]=> string(4) "Mary" ["age"]=> int(30) } }
マージされたことがわかります。配列は元の配列に従います。 array_merge
関数はすべての配列のキー値を新しい配列のキーとして使用するため、順序が並べ替えられ、キー値が再割り当てされます。新しいキーは元の配列の値です。元の配列に重複したキー値がある場合、後続の配列は前の配列の値を上書きします。元の配列のキー値には重要な情報が含まれている可能性があり、並べ替えや上書きによってデータ エラーが発生する可能性があるため、この動作は多くのシナリオで望ましくありません。では、元の配列のキー値を保存する方法はあるのでしょうか?
array_replace_recursive
関数は、PHP に付属する別の配列結合メソッドであり、array_merge# とは異なります。 ## 関数 はい、並べ替えたり上書きしたりするのではなく、元の配列のキー値を保持します。さらに、
array_replace_recursive 関数は配列の再帰的結合もサポートしており、多次元配列の結合を処理できます。以下は、
array_replace_recursive 関数を使用して 2 つの 2 次元配列をマージする例です。
$array1 = [ [ 'name' => 'John', 'age' => 25, ], ]; $array2 = [ [ 'name' => 'Mary', 'age' => 30, ], ]; $array = array_replace_recursive($array1, $array2); var_dump($array);
array(1) { [0]=> array(2) { ["name"]=> string(4) "Mary" ["age"]=> int(30) } }
array_replace_recursive 関数は多次元配列の結合もサポートしているため、処理がより便利になります。ただし、再帰的に配列を結合する場合、配列の構造が矛盾していると異常な結果が生じる可能性があるため、特に注意が必要です。
array_merge 関数を直接使用してマージすると、配列の順序が変更されたり、キーの値が上書きされたりする可能性があります。元の配列のキー値と順序を維持するには、
array_replace_recursive 関数を使用して配列をマージします。さらに、
array_replace_recursive 関数は配列の再帰的結合もサポートしているため、非常に便利です。ただし、配列を再帰的にマージする場合は、異常な状況を避けるために配列の構造に特別な注意を払う必要があることに注意してください。
以上がキー値を変更せずにPHPで2次元配列をマージする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。