Поиск и замена нескольких значений с несколькими / различными значениями в PHP5? - PullRequest
27 голосов
/ 11 февраля 2009

Есть ли встроенная функция PHP для замены нескольких значений внутри строки массивом, который точно определяет, что заменить чем?

Например:

$searchreplace_array = Array('blah' => 'bleh', 'blarh' => 'blerh');
$string = 'blah blarh bleh bleh blarh';

И в результате получится: «Блеф Блех Бле Бле Блех».

Ответы [ 5 ]

75 голосов
/ 11 февраля 2009

Вы ищете str_replace().

$string = 'blah blarh bleh bleh blarh';
$result = str_replace(
  array('blah', 'blarh'), 
  array('bleh', 'blerh'), 
  $string
);

// Дополнительный совет:

И если вы застряли с ассоциативным массивом, как в вашем примере, вы можете разделить его так:

$searchReplaceArray = array(
  'blah' => 'bleh', 
  'blarh' => 'blerh'
);
$result = str_replace(
  array_keys($searchReplaceArray), 
  array_values($searchReplaceArray), 
  $string
); 
18 голосов
/ 21 мая 2012
$string = 'blah blarh bleh bleh blarh';
$trans = array("blah" => "blerh", "bleh" => "blerh");
$result = strtr($string,$trans);

Вы можете проверить руководство для подробного объяснения.

1 голос
/ 18 июля 2018

В случае, если кто-то ищет замену одних и тех же строк разными значениями (в каждом случае). Пример, чтобы заменить все ## числами ++ ИЛИ значения из массива-

$split_at = '##';
$string = "AA ##  BB ##  CC ##  DD";
$new_string = '';
// echo $string;
$replace_num = 1;
$replace_arr = ['first' , 'second' , 'third'];
$split_at_cnt = substr_count($string, $split_at);
for ($split=0; $split <= $split_at_cnt; $split++)
{
    $new_string .= str_replace('##', ($replace_num++)." : ".$replace_arr[$split], substr( $string, 0, strpos($string, $split_at)+strlen($split_at)));
    $string = substr($string, strpos($string, $split_at)+strlen($split_at));
}

echo $new_string;
1 голос
/ 11 февраля 2009

str_replace () делает это.

Вы можете проверить руководство для более подробного объяснения.

0 голосов
/ 11 февраля 2009

Для того, что у вас есть, просто передайте этот массив в str_replace как для поиска, так и для замены (используя array_keys в параметре поиска, если вы хотите сохранить массив как есть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...