【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
キーの値は、$replacements1
の pineapple
で一度上書きされ、さらに $replacements2
の grapefruit
で上書きされています。berries
キーの値は、連想配列のキー 'a' と 'b' の値は保持され、$replacements1
の blackberry
が数値キー 0 で追加され、$replacements2
の cranberry
が数値キー 'c' で追加されています。最終的な結果は、print_r()
関数で出力されます。このように、array_replace_recursive()
関数は、配列の構造を保ちつつ、特定の要素を効率的に上書きまたは追加するために役立ちます。
array_replace_recursive
関数は、複数の配列を再帰的に結合し、後の配列の値で前の配列の値を上書きします。特に、文字列キーと数値キーで挙動が異なる点に注意が必要です。文字列キーを持つ要素は、後の配列の値で上書きされますが、数値キーを持つ要素は上書きされず、単に追加されます。このため、元の配列の数値キーの要素が保持され、新しい数値キーの要素が加わる形になります。意図しない結果を避けるため、事前に出力結果を確認し、配列の構造とキーの種類を意識して利用することが安全です。