Предположим, что есть строка «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"
Использовать 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";