поменять два слова в строку в PHP

предположим, что есть строка "foo boo foo boo" я хочу заменить все Foo на boo и booes на foo. Ожидаемый результат- "boo foo boo foo". Я получаю "фу фу фу фу". Как получить ожидаемый результат, а не текущий?

    $a = "foo boo foo boo";
    echo "$an";
    $b = str_replace(array("foo", "boo"), array("boo", "foo"), $a);
    echo "$bn";
    //expected: "boo foo boo foo"
   //outputs "foo foo foo foo"

6 ответов


использовать strtr

из руководства:

если задано два аргумента, второй должен быть массивом в виде массива ('from' = > 'to',...). Возвращаемое значение представляет собой строку, в которой все вхождения ключей массива будут заменены соответствующими значениями. Сначала будут опробованы самые длинные клавиши. После замены подстроки ее новое значение больше не будет искать.

в этом случае, ключи и значения могут быть любая длина, при условии, что нет пустого ключа; кроме того, длина возвращаемого значения может отличаться от длины str. Однако эта функция будет наиболее эффективной, когда все клавиши будут иметь одинаковый размер.

$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 to zoo. Тогда boo to foo и последний zoo to boo

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

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


$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";