Поменять два слова в строке php
Предположим, что существует строка "foo boo foo boo". Я хочу заменить все foos на boo и booes с помощью foo. Ожидаемый результат: "boo foo boo foo". То, что я получаю, это "foo foo foo foo". Как получить ожидаемый результат, а не текущий?
$a = "foo boo foo boo";
echo "$a\n";
$b = str_replace(array("foo", "boo"), array("boo", "foo"), $a);
echo "$b\n";
//expected: "boo foo boo foo"
//outputs "foo foo foo foo"
Ответы
Ответ 1
Используйте strtr
Из руководства:
Если заданы два аргумента, второй должен быть массивом в массиве форм ('from' = > 'to',...). Возвращаемое значение - это строка, в которой все вхождения ключей массива были заменены соответствующими значениями. Сначала будут проверены самые длинные ключи. После того, как подстрока будет заменена, ее новое значение больше не будет искать.
В этом случае ключи и значения могут иметь любую длину при условии, что пустая клавиша отсутствует; Кроме того, длина возвращаемого значения может отличаться от длины строки. Однако эта функция будет наиболее эффективной, если все ключи имеют одинаковый размер.
$a = "foo boo foo boo";
echo "$a\n";
$b = strtr($a, array("foo"=>"boo", "boo"=>"foo"));
echo "$b\n";
Выходы
foo boo foo boo
boo foo boo foo
В действии
Ответ 2
Возможно, используя временное значение, например coo.
пример кода,
$a = "foo boo foo boo";
echo "$a\n";
$b = str_replace("foo","coo",$a);
$b = str_replace("boo","foo",$b);
$b = str_replace("coo","boo",$b);
echo "$b\n";
Ответ 3
Сначала foo
до zoo
. Затем boo
до foo
и последним zoo
до boo
$search = array('foo', 'boo', 'zoo');
$replace = array('zoo', 'foo', 'boo');
echo str_replace($search, $replace, $string);
Ответ 4
Если в этом примере это порядок вашего дела, то с помощью функций explode
и array_reverse
могут быть удобны:
//the original string
$a = "foo boo foo boo";
//explodes+reverse+implode
$reversed_a = implode(' ', array_reverse(explode(' ', $a)));
//gives boo foo boo foo
PS: Не может быть дружественным к памяти и, возможно, не удовлетворяет всем случаям, связанным с заменой, но просто удовлетворить пример, который вы дали.:)
Ответ 5
$a = "foo boo foo boo";
echo "$a\n";
$a = str_replace("foo", "x", $a);
$a = str_replace("boo", "foo", $a);
$a = str_replace("x", "boo", $a);
echo "$a\n";
Обратите внимание, что "x" не может встречаться в $a
Ответ 6
Попробуйте
$a = "foo boo foo boo";
echo "$a\n";
$b = str_replace(array("foo", "boo","[anything]"), array("[anything]", "foo","boo"), $a);
echo "$b\n";