Всем доброго времени суток, сейчас пишу скрипт почтовика и для удобства пользователей есть необходимость в теле письма выполнить рандомизацию. Вот тело письма: {Петя|Вася|Коля|Толя} сегодня пошол в {школу|театр|кино|на дискотеку} таких конструкций {Петя|Вася|Коля|Толя} в теле будет не ограниченное количество. Результат: 1. Петя сегодня пошол в школу 2. Вася сегодня пошол в школу 3. Коля сегодня пошол в школу 4. Толя сегодня пошол в школу 5. Петя сегодня пошол в театр Ну и так далее... Помогите с кодом на php, а то что-то с обработкой строк не очень дружу.
С поиском и русским языком видимо тоже не очень дружить получается. https://forum.antichat.net/showpost.php?p=2511238&postcount=17494
PHP: <?php $names = array('Петя','Вася','Коля','Толя'); $locations = array('школу','театр','кино'); $count = 5; // сколько будет строчек for($i = 0; $i < $count; $i++)echo $names[rand(1,count($names)) - 1].' пошел в '.$locations[rand(1,count($locations)) - 1].'<br />'; ?> Редактируй только первые три строчки.
Во-первых, ты налажал со скобочками =) PHP: $names[rand(1,count($names) - 1)] Так правильно будет. Во-вторых, ТСу нужно вовсе не это. ТС, можно парсить начиная с "{" и заканчивая "}", затем сделать explode(); и уже выводить случайный элемент массива.
http://xbb.uz/randomizator/text.bb Отличный класс, который поддерживает еще десяток функций рендомизации., так-же он умеет работать с ситуациями когда нарушен синтаксис или экранированы скобки. вот еще PHP: while (preg_match("/\{([^{}]+?)\}/", $str)) $str= preg_replace_callback("/\{([^{}]+?)\}/",create_function('$s','$a=explode("|",$s[1]);return $a[rand(0,count($a)-1)];'),$str);
Угу, все правильно я написал, "со скобочками". В вашем "правильном" варианте, получить нулевой индекс невозможно, в моем варианте все замечательно.
Прошу прощения, я привык ставить 0 в rand, поэтому не обратил внимания на единицу. Как обычно, сужу по себе)