Не могу выполнить задание:
Дано:
$x = '{p1 | p2 | p3} some text there {p4 | p5 | p6} and some text there {p7 | p8 | p9}';
Нужно чтобы рандомно выбирались значения в фигурных скобках. Т.е нужно раскрыть скобки и выбрать одно значение рандомно. Скобок в тексте может быть и 1000. На выходе должно получится вот так:
p3 some text there p5 and some text there p7
Советуют сделать через регулярки и explode(
Разобрался сам, кому надо, забирайте)
<?php
function genWords($x) {
preg_match_all('~\{(.+)\}~U', $x, $g); // Парсим скобки
for($i = 0; $i < count($g[1]); $i++) { //генерируем
$f = explode('|', $g[1][$i] );
$f = $f[(rand(0,count($f) - 1))];
$x = preg_replace('~\{(.+)\}~U', $f, $x, 1);
}
echo $x;
}
echo genWords('{ p1 | p2 | p3 } some text there { p4 | p5 | p6 } and some text there { p7 | p8 | p9 }');
?>
Тут можно объединить поиск и замену в один вызов preg_replace_callback
. Также заметьте, что экранировать фигурные скобки необязательно, и модификатор жадности можно и не использовать, если заменить точку исключающим символьным классом [^{}]
(любой символ, отличный от {
и }
).
См. демо на PHP:
$x = '{p1 | p2 | p3} some text there {p4 | p5 | p6} and some text there {p7 | p8 | p9}';
$x = preg_replace_callback('~{([^{}]+)}~', function($g) {
$f = explode(' | ', trim($g[1]));
$f = $f[(rand(0,count($f) - 1))];
return $f;
}, $x);
echo $x;
Обратите внимание, trim()
и ' | '
использованы для того, чтобы в результате исключить появление лишних пробелов.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Делаю загрузку видео и есть необходимость обрабатывать видео на сервере, для дальнейшей публикации
Подскажите как можно улучшить данный код с сохранением его логики
после экспорта и импорта таблицы , в столбце postText появились знаки r/n ,как убрать ?