PHP7とPHP8でのstr_replaceの多次元配列処理の違いとは?配列が’Array’になる?

スポンサーリンク

概要

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"
}

コメント