$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