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

作成日: 更新日:

array_replace関数は、一つまたは複数の配列の内容で、最初の配列を置換する関数です。この関数は、最初の配列(array1)をベースとして、後続の配列(array2, array3, ...)の内容を順番に適用し、新しい配列を生成します。

具体的には、array2以降の配列で、array1に存在するキーと一致するキーを持つ要素は、対応する値で置換されます。array2以降の配列にのみ存在するキーを持つ要素は、array1に追加されます。array1に存在するが、array2以降の配列に存在しないキーを持つ要素は、そのままarray1の値が維持されます。

複数の置換配列が指定された場合、置換は指定された順序で実行されます。つまり、後続の配列が前の配列による置換結果をさらに上書きする可能性があります。

元の配列(array1)は変更されず、新しい配列が返されます。もし、array_replace関数に渡される最初の引数が配列でない場合、エラーが発生します。同様に、後続の置換配列が配列でない場合もエラーが発生します。

この関数は、配列の特定の部分を他の配列の内容で柔軟に更新したり、デフォルト値を別の設定で上書きしたりする際に役立ちます。例えば、設定ファイルのデフォルト値をプログラムの起動時に環境変数やコマンドライン引数で指定された値で上書きするような場合に利用できます。配列のキーと値の型は保持されます。

基本的な使い方

構文(syntax)

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

引数(parameters)

array $array, array ...$replacements

  • array $array: 値を置き換える対象となる配列
  • array ...$replacements: $array の値を置き換えるための配列。指定された順序で $array に適用されます。

戻り値(return)

array

引数として渡された配列を、後続の配列の要素で置き換えた新しい配列を返します。

サンプルコード

PHP array_replaceで配列のキーを置換する

<?php

/**
 * array_replace 関数を使った配列の置換サンプル.
 */
function arrayReplaceExample(): array
{
    $baseArray = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
    $replacements1 = ['a' => 'apricot', 'd' => 'date'];
    $replacements2 = ['b' => 'blueberry', 'e' => 'elderberry'];

    // array_replace を使って配列を置換
    $replacedArray = array_replace($baseArray, $replacements1, $replacements2);

    return $replacedArray;
}

// サンプル関数の実行と結果の表示
$result = arrayReplaceExample();
print_r($result);

?>

array_replace関数は、PHPの配列を置換するための関数です。この関数を使うことで、複数の配列に基づいて、最初の配列の要素を置き換えることができます。

引数には、最初に置換対象となる配列 $array を指定します。その後、可変長引数 $replacements として、置換に使用する複数の配列を指定します。$replacements に指定された配列は、順番に $array を上書きするように適用されます。

具体的には、$replacements 内の配列のキーが $array に存在する場合、そのキーに対応する $array の値は $replacements の値で置き換えられます。$replacements$array に存在しないキーが含まれている場合、そのキーと値のペアは $array に追加されます。複数の $replacements 配列が指定された場合、後の配列が前の配列を上書きします。

サンプルコードでは、$baseArray を基本となる配列として、$replacements1$replacements2 を使って置換を行っています。$replacements1 によって 'a' の値が 'apricot' に、'd' のキーと値が追加されます。さらに $replacements2 によって 'b' の値が 'blueberry' に、'e' のキーと値が追加されます。

array_replace関数は、置換後の新しい配列を返します。元の配列 $array は変更されません。この関数は、設定の上書きやデフォルト値の適用など、さまざまな場面で役立ちます。

array_replace関数は、第一引数の配列を、後続の配列で上書きする関数です。キーが同じ場合、後続の配列の値で置き換えられます。後続の配列に新たなキーが存在する場合、そのキーと値は第一引数の配列に追加されます。元の配列は変更されず、新しい配列が返される点に注意が必要です。複数の置換配列を指定した場合、順番に処理されます。後の配列が前の配列の値を上書きする可能性があります。キーが数値の場合、array_replaceは後の配列の値を前の配列の値に上書きします。しかし、後の配列に前の配列に存在しないキーがある場合、その要素は追加されません。+演算子とは動作が異なるため、混同しないように注意しましょう。

PHP array_replace_recursiveで配列を再帰結合する

<?php

/**
 * array_replace_recursive のサンプルコード
 *
 * 複数の配列を再帰的に結合し、後の配列の値で前の配列の値を上書きします。
 */

$base = [
    'citrus' => ["orange"],
    'berries' => ["a" => "raspberry", "b" => "blueberry"],
];

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

$replacements2 = [
    'citrus' => ["grapefruit"],
    'berries' => ["c" => "cranberry"],
];

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

print_r($result);

/*
出力結果:
Array
(
    [citrus] => Array
        (
            [0] => grapefruit
        )

    [berries] => Array
        (
            [a] => raspberry
            [b] => blueberry
            [0] => blackberry
            [c] => cranberry
        )

)
*/

array_replace_recursive() 関数は、PHP 8 で利用可能な配列操作関数の一つで、複数の配列を再帰的に結合し、後の配列の値で前の配列の値を上書きする際に使用します。この関数は、特に多次元配列の値をマージする際に便利です。

引数 $array は、ベースとなる配列です。引数 $replacements は、上書きに使用する一つまたは複数の配列です。複数の $replacements 配列を指定した場合、後の配列が前の配列を上書きする形で処理されます。

この関数は、配列 $array をベースに、$replacements 配列の内容を再帰的にマージした新しい配列を返します。キーが同じ要素については、$replacements の値で $array の値が上書きされます。キーが数値の場合、$replacements の要素は $array の末尾に追加されます。再帰的な処理により、多次元配列の内部要素も同様にマージされます。

サンプルコードでは、$base 配列をベースに、$replacements1$replacements2 の内容を array_replace_recursive() 関数でマージしています。citrus キーの値は、$replacements1pineapple で一度上書きされ、さらに $replacements2grapefruit で上書きされています。berries キーの値は、連想配列のキー 'a' と 'b' の値は保持され、$replacements1blackberry が数値キー 0 で追加され、$replacements2cranberry が数値キー 'c' で追加されています。最終的な結果は、print_r() 関数で出力されます。このように、array_replace_recursive() 関数は、配列の構造を保ちつつ、特定の要素を効率的に上書きまたは追加するために役立ちます。

array_replace_recursive関数は、複数の配列を再帰的に結合し、後の配列の値で前の配列の値を上書きします。特に、文字列キーと数値キーで挙動が異なる点に注意が必要です。文字列キーを持つ要素は、後の配列の値で上書きされますが、数値キーを持つ要素は上書きされず、単に追加されます。このため、元の配列の数値キーの要素が保持され、新しい数値キーの要素が加わる形になります。意図しない結果を避けるため、事前に出力結果を確認し、配列の構造とキーの種類を意識して利用することが安全です。

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