поменять два слова в строке 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" 

Solutions Collecting From Web of "поменять два слова в строке php"

Использовать 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 

В бою

Возможно использование временного значения, такого как 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"; 

Сначала foo в zoo . Затем boo to foo и последний zoo для boo

 $search = array('foo', 'boo', 'zoo'); $replace = array('zoo', 'foo', 'boo'); echo str_replace($search, $replace, $string); 

Если, как в этом примере, это порядок вашего дела, то также array_reverse функции array_reverse и 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: Не может быть дружественным к памяти и, возможно, не удовлетворять всем случаям, связанным с заменой , но просто удовлетворить пример, который вы дали. 🙂

 $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

Попробуй

 $a = "foo boo foo boo"; echo "$a\n"; $b = str_replace(array("foo", "boo","[anything]"), array("[anything]", "foo","boo"), $a); echo "$b\n";