概要
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"]に変換されてから文字列置換が行われる
