概要
PHPのstr_replace関数の第3引数に多次元配列を渡した場合、PHP7とPHP8で挙動が異なるので注意が必要である。
検証
検証用コード
<?php
$array = ["abc", ["abc","def"]];
$array2 = str_replace("a", 'z', $array);
var_dump($array2);
PHP7での実行結果
array(2) {
[0]=>
string(3) "zbc"
[1]=>
array(2) {
[0]=>
string(3) "abc"
[1]=>
string(3) "def"
}
}
- 1次元配列の部分は置換されるが、2次元配列の部分は置換されずに元の配列がそのまま返される
PHP8での実行結果
Warning: Array to string conversion in /xxx/xxx/xxx/xxx.php on line xxx
array(2) {
[0]=>
string(3) "zbc"
[1]=>
string(5) "Arrzy"
}
- PHP8では配列を文字列として使用すると
Array
という文字列に変換されるhttps://www.php.net/manual/ja/language.types.string.php#language.types.string.casting
よって、["abc", ["abc","def"]]
は["abc", "Array"]
に変換されてから文字列置換が行われる