Замена повторяющегося значения в строке случайными значениями

#php #arrays #foreach

#php #массивы #предначертание #foreach

Вопрос:

 Today is a sunny day
  

Я хотел бы взять is и заменить это тремя случайными терминами.

Итак: Today {was|wasn't|isn't} a sunny day

Однако, если is находится в другой строке с пятью вхождениями (скажем, в статье), я хотел бы заменить каждое вхождение случайным значением из {was|wasn't|isn't}

Как я могу это сделать?

Пока я знаю, что вы должны использовать str_replace с массивом внутри цикла foreach. Однако я не могу заставить его работать.

Любая помощь с благодарностью.

Спасибо!

Комментарии:

1. Уточнение: если строка содержит ‘is’ менее 5 раз, то замените ее целым блоком из всех 3. Если ‘is’ найдено > = 5 раз, то просто случайным образом выберите один из 3 вместо замены его блоком из 3?

Ответ №1:

Попробуйте это:

 $replacements = array("was", "wasn't", "isn't");
preg_replace("/wisw/e", "$replacements[array_rand($replacements)]", $text);
  

Модификатор ‘e’ в искомом регулярном выражении приводит к тому, что строка замены вычисляется как PHP-код. затем array_rand используется для выбора случайного ключа из $replacements

Ответ №2:

Альтернативный способ…

 $str = "Today is a sunny day";
$findme = "is";
$arr = array("was","wasn't","isn't");
 $tmp = explode("is",$str);
 $str = $tmp[0];
 for($i=1;$i<count($tmp);$i  )
    $str .= array_rand($arr) . $tmp[$i];
  

Ответ №3:

Смотрите это дурацкое решение здесь

 $d = array("was","wasn't","isn't");
$st = "Today is a sunny day, is it not?";
$arr = explode(" ", $st);



        for($i=0;$i<count($arr);$i  ){
             if ($arr[$i] == "is"){
             $r =  rand(0, 2);
             $arr[$i] = $d[$r];
        }
        }

foreach($arr as $v){

    echo $v." ";
}

?>
  

Выводит

 Today wasn't a sunny day, was it not?