PHP str_replace для цикла for из массива

Хорошо, у меня есть str_replace и что я хочу сделать, это принимать значения из массива и брать следующий фрагмент, чтобы заменить слово «собака». Поэтому в основном я хочу читать строку $:

«Утка съела кошку, а свинья съела шимпанзе»

<?php $string = 'The dog ate the cat and the dog ate the chimp'; $array = array('duck','pig'); for($i=0;$i<count($array);$i++) { $string = str_replace("dog",$array[$i],$string); } echo $string; ?> 

Этот код просто возвращает:

«Утка съела кошку, а утка съела шимпанзе»

Я пробовал несколько вещей, но ничего не работает. У кого-нибудь есть идеи?

Изменить: Извините за ошибочный ответ раньше. Это будет сделано. Нет str_replace , нет preg_replace , просто сырой, быстрый поиск строк и сращивание:

 <?php $string = 'The dog ate the cat and the dog ate the chimp'; $array = array('duck', 'pig'); $count = count($array); $search = 'dog'; $searchlen = strlen($search); $newstring = ''; $offset = 0; for($i = 0; $i < $count; $i++) { if (($pos = strpos($string, $search, $offset)) !== false){ $newstring .= substr($string, $offset, $pos-$offset) . $array[$i]; $offset = $pos + $searchlen; } } $newstring .= substr($string, $offset); echo $newstring; ?> 

ps В этом примере не большое дело, но вы должны держать count() вне своего цикла. С ним, где у вас было это, он запускается на каждой итерации и медленнее, чем просто называть его один раз заранее.

 <?php $string = 'The dog ate the cat and the dog ate the chimp'; $array = array('duck', 'pig'); $count = count($array); for($i = 0; $i < $count; $i++) { $string = preg_replace('/dog/', $array[$i], $string, 1); } echo $string; ?> 

Утка съела кошку, и свинья съела шимпанзе

После первой итерации вашего цикла $ string будет заменена обе вхождения собаки утиной, и следующие итерации ничего не сделают.

Я не могу придумать более элегантный способ решения этого вопроса, и я надеюсь, что есть что-то более простое:

 <?php $search = 'The dog ate the cat and the dog ate the chimp'; $replacements = array('duck','pig'); $matchCount = 0; $replace = 'dog'; while(false !== strpos($search, $replace)) { $replacement = $replacements[$matchCount % count($replacements)]; $search = preg_replace('/('.$replace.')/', $replacement, $search, 1); $matchCount++; } echo $search; 

еще один вариант

  $str = 'The dog ate the cat and the dog ate the chimp'; $rep = array('duck','pig'); echo preg_replace('/dog/e', 'array_shift($rep)', $str); 

Использование substr_replace() ;

 <?php function str_replace_once($needle, $replace, $subject) { $pos = strpos($subject, $needle); if ($pos !== false) $subject = substr_replace($subject, $replace, $pos, strlen($needle)); return $subject; } $subject = 'The dog ate the cat and the dog ate the chimp'; $subject = str_replace_once('dog', 'duck', $subject); $subject = str_replace_once('dog', 'pig', $subject); echo $subject; ?>