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