Dizi döngü için PHP str_replace

5 Cevap php

Tamam ben bir str_replace var ve ne yapmak istiyorum, bir diziden değerleri alır ve birlikte kelime "köpek" yerine bir sonraki parça almaktır. Yani temelde ben $ string okumak istiyorum:

"Ördek kedi yedik ve domuz şempanze yedik"

<?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;
?>

Bu kod sadece döndürür:

"Ördek kedi yedik ve ördek şempanze yedik"

Ben birkaç şey denedim ama hiçbir şey çalışır. Herkes herhangi bir fikir var mı?

5 Cevap

Edit: daha önce hatalı cevap için özür dilerim. Bu yapacağım. Hayır str_replace, hayır preg_replace, sadece ham, hızlı bir dize arama ve yapıştırma:

<?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;
?>

P.S. Değil büyük bir bu örnekte anlaşma, ancak döngü dışında count() tutmalı. Bunu olduğu yerde onunla, her yineleme yürütülen ve sadece bir kez önceden çağırarak daha yavaş olur.

<?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;
?>

Ördek kedi yedik ve domuz şempanze yedik

Loop $ dize için ilk yineleme ördek ile köpeğin iki tekrarlarını yerini almış olacak ve aşağıdaki yineleme hiçbir şey yapacağız sonra.

Ben bu çözümü daha zarif bir şekilde düşünemiyorum ve ben mümkün basit bir şey olduğunu umuyoruz:

<?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;

Henüz bir seçenek

 $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);

Kullanma 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;
?>