Помогите как заменить в моем случае в таких вариантах:
$string = "This is simple string";
$search = array (
"This is simple",
"string",
"simple",
"apple");
$replace = array (
"This is red",
"apple",
"false",
"lemon");
$result = str_replace($search, $replace, $string);
Результат должен быть: Это красное яблоко
Не так: Это ложное яблоко ИЛИ ЖЕ Это красный лимон ИЛИ ЖЕ Это ложный красный лимон
Если при каждой замене измененная строка обрезается до некоторой переменной, а затем возвращается позже, результат может быть правильным. Но я не знаю, это мой вариант, но я не мог этого понять.
использование strtr()
:
$string = "This is simple string";
$search = array
(
"This is simple",
"string",
"simple",
"apple");
$replace = array
(
"This is red",
"apple",
"false",
"lemon");
echo strtr($string,array_combine($search, $replace));
Выход:
This is red apple
Я должен сообщить читателям, что эта прекрасная функция также необычна. Если вы никогда не использовали эту функцию раньше, я рекомендую вам прочитайте инструкцию а также комментарии под ним.
Главное для этого случая (скорее мой ответ):
Если дано два аргумента, вторым должен быть массив в массиве формы (‘from’ => ‘to’, …). Возвращаемым значением является строка, в которой все вхождения ключей массива были заменены соответствующими значениями. Самые длинные ключи будут опробованы первыми. После замены подстроки ее новое значение больше не будет искать.
При попытке кодирования ОП ключи ($search
) упорядочены по убыванию длины. Это приводит поведение функций в соответствие с тем, что ожидают большинство людей.
Однако рассмотрим эту демонстрацию, где ключи (и их значения) слегка перемешаны:
Код: (демонстрация)
$string="This is simple string";
$search=[
"string", // listed first, translated second, changed to "apple" which becomes "untouchable""apple", // this never gets a chance
"simple", // this never gets a chance
"This is simple" // listed last, but translated first and becomes "untouchable"];
$replace=[
"apple",
"lemon",
"false",
"This is red"];
echo strtr($string,array_combine($search, $replace));
Вы можете быть удивлены, узнав, что это обеспечивает тот же результат: This is red apple
Других решений пока нет …