PHP: Как заменить значения в строке последовательно? - PullRequest
1 голос
/ 20 октября 2011

В настоящее время я использую PHP str_replace для замены определенного значения другим в цикле.

Проблема в том, что str_replace заменит ВСЕ экземпляры первого значения вторым значением, а не заменяет их последовательно. Например:

$replacements = array('A', 'one', 'some');
$str = "The quick brown fox jumps over the lazy dog and runs to the forest.";
foreach($replacements as $replace){
    $str = str_replace('the', $replace, $str);
}

это в конечном итоге вернет:

«Быстрая коричневая лиса перепрыгивает через ленивую собаку и бежит в лес».

, а не то, что я хочу, что будет:

«Быстрая коричневая лиса перепрыгивает через одну ленивую собаку и бежит в какой-то лес».

Что было бы наиболее эффективным способом сделать это? Я думал, что смогу использовать preg_replace, но я посредственен с regex.

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

Не проверено, но я думаю, что это сработает.

$replacements = array('A', 'one', 'some');
$str = "The quick brown fox jumps over the lazy dog and runs to the forest.";
foreach($replacements as $replace){
    $str = preg_replace('/the/i', $replace, $str, 1);
}
echo $str;

Редактировать: добавлено i, чтобы сделать его без учета регистра

0 голосов
/ 20 октября 2011

Ладно, может быть, это очень запутанно?

$replacements = array('A', 'one', 'some');
$str = "The quick brown fox jumps over the lazy dog and runs to the forest.";
$str_array = explode(" ", $str);
$replace_word = "the";
$i = $j = 0;
foreach($str_array as $word){
      if(strtolower($word) === $replace_word){
         $str_array[$i] = $new_word[$j];
         $j++;
      }
   $i++;
}
$str = implode(" ", $str_array);
0 голосов
/ 20 октября 2011

Кажется, это сработало:

$replacements = array('A', 'one', 'some');
$the=array('the','the','the');
$str = "The quick brown fox jumps over the lazy dog and runs to the forest.";
$str = str_ireplace($the, $replacements, $str);

Я думаю, что это именно то, что спросили.

см. Описание параметра http://php.net/manual/en/function.str-replace.php

http://codepad.org/VIacFmoM

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