уведомление о преобразовании массива в строку при использовании str_replace - PullRequest
2 голосов
/ 19 февраля 2012

Когда я использую str_replace с массивом в качестве второго аргумента, как в часто задаваемом и принятом ответе на этот вопрос , я получаю уведомление о преобразовании массива в строку. Зачем? Пример:

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

дает:

Примечание PHP: преобразование массива в строку в коде оболочки php в строке 1

и следующий вывод:

Array b Array bArray Array

вместо

1 b 2 b3 4

1 Ответ

5 голосов
/ 19 февраля 2012

Вы пытаетесь заменить один символ ('a') несколькими символами (1,2,3,4,5,6,7,8,9,10). PHP не может понять это и пытается преобразовать этот массив в строку. Когда вы используете строку в качестве параметра $ search, вы также должны использовать строку в качестве параметра $ replace. Массив как параметр $ replace можно использовать только тогда, когда $ search также является массивом. Цитирование из документации:

Если поиск и замена являются массивами, то str_replace () берет значение из каждого массива и использует их для поиска и замены по теме. Если замена имеет меньше значений, чем поиск, тогда для остальных значений замены используется пустая строка. Если поиск - это массив, а замена - это строка, то эта замещающая строка используется для каждого значения поиска. Однако обратное не имеет смысла.

Вот код, который будет работать:

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