使用str_replace时的数组到字符串转换通知

时间:2012-02-18 22:11:10

标签: php str-replace

当我使用带有数组的str_replace作为第二个参数时,就像在this question的多次赞成和接受的答案中一样,我得到一个数组到字符串转换通知。为什么? 例如:

$str = 'a b a ba a';
$numerals = range(1, 10);
$str = str_replace('a', $numerals, $str);

给出:

  

PHP注意:第1行的php shell代码中的数组到字符串转换

以及以下输出:

  

数组b数组bArray数组

而不是

  

1 b 2 b3 4

1 个答案:

答案 0 :(得分:4)

您正尝试将多个字符(1,2,3,4,5,6,7,8,9,10)替换为一个字符('a')。 PHP无法解决这个问题并尝试将此数组转换为字符串。当您将字符串用作$ search参数时,还必须使用string作为$ replace参数。仅当$ search也是数组时,才能使用$ replace参数作为数组。引自文档:

  

如果搜索和替换是数组,则str_replace()从每个数组中获取一个值,并使用它们来搜索和替换主题。如果replace的值小于search,则空字符串将用于其余的替换值。 如果search是一个数组而replace是一个字符串,那么这个替换字符串将用于搜索的每个值。但是反过来没有意义。

以下是可行的代码:

$str = 'a b a ba a';
$count = 1;
while(($letter_pos = strpos($str, 'a')) !== false) {
    $str = substr_replace($str, $count++, $letter_pos, 1);
}