Как заменить несколько значений в php

$srting = "test1 test1 test2 test2 test2 test1 test1 test2"; 

Как изменить значения test1 на test2 и test2 на test1 ?
Когда я использую str_replace и preg_replace все значения изменяются до последнего значения массива. Пример:

 $pat = array(); $pat[0] = "/test1/"; $pat[1] = "/test2/"; $rep = array(); $rep[0] = "test2"; $rep[1] = "test1"; $replace = preg_replace($pat,$rep,$srting) ; 

Результат:

 test1 test1 test1 test1 test1 test1 test1 test1 

Это должно сработать для вас:

 <?php $string = "test1 test1 test2 test2 test2 test1 test1 test2"; echo $string . "<br />"; echo $string = strtr($string, array("test1" => "test2", "test2" => "test1")); ?> 

Вывод:

 test1 test1 test2 test2 test2 test1 test1 test2 test2 test2 test1 test1 test1 test2 test2 test1 

Оформить заказ DEMO: http://codepad.org/b0dB95X5

Самый простой способ – использовать функцию str_ireplace для нечувствительной к регистру замены:

 $text = "test1 tESt1 test2 tesT2 tEst2 tesT1 test1 test2"; $from = array('test1', 'test2', '__TMP__'); $to = array('__TMP__', 'test1', 'test2'); $text = str_ireplace($from, $to, $text); 

Результат:

 test2 test2 test1 test1 test1 test2 test2 test1 

С помощью preg_replace вы можете заменить тестовое значение на временные значения, а затем заменить временное значение на переменные тестовые значения

 $srting = "test1 test1 test2 test2 test2 test1 test1 test2"; $pat = array(); $pat[0] = '/test1/'; $pat[1] = '/test2/'; $rep = array(); $rep[1] = 'two'; //temporary values $rep[0] = 'one'; $pat2 = array(); $pat2[0] = '/two/'; $pat2[1] = '/one/'; $rep2 = array(); $rep2[1] = 'test2'; $rep2[0] = 'test1'; $replace = preg_replace($pat,$rep,$srting) ; $replace = preg_replace($pat2,$rep2,$replace) ; echo $srting . "<br/>"; echo $replace; 

вывод:

 test1 test1 test2 test2 test2 test1 test1 test2 test2 test2 test1 test1 test1 test2 test2 test1