array_replace_recursive

関数の概要

PHPの array_replace_recursive 関数は、複数の配列を再帰的にマージし、キーが重複する場合は後の配列の値で置き換えることができます。特に多次元配列の結合や更新を行いたい場合に便利で、単純な array_replace と異なり、配列の中にさらに配列がある場合でも適切にマージしてくれます。

パラメータの説明

  • array $array1 : ベースとなる配列。これに後続の配列の値が上書きまたは追加されます。
  • array ...$arrays : 上書きや追加の対象となる複数の配列。必要に応じて数個渡すことが可能です。

戻り値

合成された配列を返します。元の配列は変更されず、新たな配列を生成します。キーが重複している場合は、後から指定した配列の値で置き換わります。再帰的にマージが行われるため、ネストされた配列も正しく統合されます。

使用例

基本的な使い方

<?php
$array1 = [
  'fruit' => [
    'apple' => 'red',
    'banana' => 'yellow'
  ],
  'vegetable' => 'carrot'
];

$array2 = [
  'fruit' => [
    'apple' => 'green',
    'grape' => 'purple'
  ],
  'drink' => 'water'
];

$result = array_replace_recursive($array1, $array2);
print_r($result);
?>

この例では、$array1 の ‘fruit’ 配列の中の ‘apple’ の値が ‘red’ から ‘green’ に置き換わり、’grape’ という新しい要素が追加されます。更に、新たに ‘drink’ のキーも追加されています。

多次元配列の深い置き換え

<?php
$array1 = [
  'settings' => [
    'theme' => 'light',
    'layout' => [
      'header' => 'fixed',
      'footer' => 'static'
    ]
  ]
];

$array2 = [
  'settings' => [
    'layout' => [
      'header' => 'static'
    ],
    'language' => 'ja'
  ]
];

$result = array_replace_recursive($array1, $array2);
print_r($result);
?>

ここでは、settings.layout.header の値が「fixed」から「static」に変更され、settings.language に「ja」が新たに追加されています。footer の値はそのまま保持されます。

複数の配列をまとめて置き換え

<?php
$array1 = ['a' => 1, 'b' => ['x' => 10, 'y' => 20]];
$array2 = ['b' => ['x' => 15]];
$array3 = ['a' => 2, 'c' => 3];

$result = array_replace_recursive($array1, $array2, $array3);
print_r($result);
?>

複数配列のマージ例です。$array1 の ‘a’ は最終的に $array3 の値 2 に置き換わり、 b.x$array2 の 15 に更新されます。 ‘b.y’ は元のまま、そして ‘c’ は新しく追加されます。

関連する関数

  • array_replace – 再帰的ではなく、一次元配列に対して置き換えを行います。
  • array_merge_recursive – 再帰的にマージしますが、キーが重複すると配列を生成して値を保持します。
  • array_merge – 配列を結合しますが、キーが重複すると数値インデックス付き配列は結合、文字列キーは上書きされます。

まとめ

array_replace_recursive は多次元配列の値を再帰的に置き換えたい場合に非常に便利な関数です。設定情報や複雑な配列構造の中で一部だけを更新したいケースで活躍します。用途に応じて array_merge_recursive などとの違いを理解し、適切な配列関数を使って効率的に配列操作を行いましょう。