当我使用带有数组的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
答案 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);
}