【PHP8.x】array_replace_recursive関数の使い方

作成日: 更新日:

array_replace_recursive関数は、一つまたは複数の配列の内容で最初の配列を再帰的に置換する関数です。この関数は、最初の配列をベースとして、後続の配列の要素で値を上書きしていきます。キーが同じ要素が見つかった場合、値が置き換えられます。もし、キーが最初の配列にしか存在しない場合は、新しい要素として追加されます。

この関数は再帰的な処理を行うため、多次元配列にも対応しています。つまり、配列の中に配列が含まれているような場合でも、それぞれの階層で置換処理が行われます。ただし、値がスカラー値(文字列、数値、真偽値など)の場合、後続の配列の値で完全に置き換えられます。配列の場合のみ、再帰的に処理されます。

具体的な使用例としては、設定ファイルのデフォルト値を基本設定とし、ユーザーごとの設定でデフォルト値を上書きするようなケースが考えられます。複数の設定ファイルをマージして、最終的な設定を作成する場合にも利用できます。

array_replace_recursive関数は、引数として一つ以上の配列を受け取ります。最初の配列が置換の対象となり、後続の配列が置換に使用する値を提供します。関数は、置換された新しい配列を返します。元の配列は変更されません。もし引数が一つしか渡されなかった場合は、元の配列がそのまま返されます。エラーは発生しません。引数にオブジェクトが渡された場合、配列にキャストされます。

基本的な使い方

構文(syntax)

array_replace_recursive(array $array, array ...$replacements): array

引数(parameters)

array $array, array ...$replacements

  • array $array: 置換処理の基となる配列
  • array ...$replacements: 置換元の配列。複数指定可能

戻り値(return)

array

指定された配列を再帰的にマージした新しい配列を返します。

サンプルコード

array_replace_recursiveで配列を再帰的に置換する

<?php

/**
 * array_replace_recursive の使用例
 */
function arrayReplaceRecursiveExample(): array
{
    $base = [
        'citrus' => ["orange"] ,
        'berries' => ["a" => "raspberry", "b" => "blueberry"]
    ];

    $replacements1 = [
        'citrus' => ["pineapple"],
        'berries' => ["blueberry" => "cranberry"]
    ];

    $replacements2 = [
        'citrus' => ["pomelo"]
    ];

    $result = array_replace_recursive($base, $replacements1, $replacements2);

    return $result;
}

// 関数の実行と結果の表示
$replacedArray = arrayReplaceRecursiveExample();
print_r($replacedArray);

?>

array_replace_recursive関数は、PHPの配列を再帰的に置換する関数です。第一引数 $array に指定された配列をベースとして、続く引数 $replacements に指定された配列の値で、再帰的に値を置換します。

この関数は、複数の配列をマージする際に、同じキーを持つ要素を上書きするのではなく、さらに深くマージする必要がある場合に役立ちます。特に多次元配列において、キーが一致する要素に対して、その要素自体も配列である場合に、再帰的にマージ処理が行われます。

サンプルコードでは、$base配列を基本として、$replacements1$replacements2の配列で値を置換しています。$replacements1では、citrusキーの値をpineappleに、berriesキーのblueberryの値をcranberryに置き換えています。$replacements2では、さらにcitrusキーの値をpomeloに置き換えています。

重要な点として、$replacementsに指定された配列のキーが$arrayに存在しない場合、新しいキーと値のペアが$arrayに追加されるのではなく、無視されます。また、数値キーの場合、array_replace関数と同様に、後続の配列で同じキーの値が上書きされます。

戻り値は、置換処理が完了した新しい配列です。元の配列($array)は変更されません。この例では、arrayReplaceRecursiveExample関数を実行後、置換後の配列が$replacedArrayに格納され、print_r関数によって出力されます。これにより、array_replace_recursive関数がどのように配列を再帰的に置換するかを確認できます。

array_replace_recursive関数は、配列の値を再帰的に置換します。キーが同じ場合、値が置換されますが、配列の場合はさらに深く置換処理を行います。置換元の配列($array)が変更されるのではなく、新しい配列が返される点に注意してください。複数の置換配列($replacements)を指定した場合、後の配列が前の配列を上書きします。キーが存在しない場合は、新しいキーと値が追加されます。数値キーの場合、後の配列の値で前の配列の値が上書きされます。文字列キーの場合は、値が上書きされるだけでなく、再帰的にマージされます。想定外の挙動を防ぐため、配列の構造をよく理解した上で使用することが重要です。

【PHP8.x】array_replace_recursive関数の使い方 | いっしー@Webエンジニア