Генератор рерайтов PHP

292
04 января 2017, 04:50

Не могу выполнить задание:

Дано:

$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(

Answer 1

Разобрался сам, кому надо, забирайте)

<?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 }');
        ?>  
Answer 2

Тут можно объединить поиск и замену в один вызов 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() и ' | ' использованы для того, чтобы в результате исключить появление лишних пробелов.

READ ALSO
Как узнать качество видео и поменять его с помощью ffmpeg

Как узнать качество видео и поменять его с помощью ffmpeg

Делаю загрузку видео и есть необходимость обрабатывать видео на сервере, для дальнейшей публикации

332
PHP расширение v8js - класс не определен

PHP расширение v8js - класс не определен

Доброго времени суток!

461
Сохранение цвета текста в Cookie

Сохранение цвета текста в Cookie

Подскажите как можно улучшить данный код с сохранением его логики

314
В базе данных появились символы r/n

В базе данных появились символы r/n

после экспорта и импорта таблицы , в столбце postText появились знаки r/n ,как убрать ?

475