Вращение контента с использованием PHP? - PullRequest
0 голосов
/ 31 июля 2011

Может кто-нибудь, пожалуйста, помогите мне? Скажите, если бы у меня был этот текст или меньший раздел, сохраненный в переменной, как я могу рандомизировать слова в '{}'?
Например, первый из них «{важный | существенный | критический | критический | жизненный | значимый}», как я могу заставить PHP выбрать одно из этих слов случайным образом, а затем повторить его? Спасибо за помощь. :)

Ответы [ 3 ]

3 голосов
/ 31 июля 2011

http://webarto.com/62/random-sentence-spinning-function

function get_random($matches)
{
    $rand = array_rand($split = explode("|", $matches[1]));
    return $split[$rand];
}

function show_randomized($str)
{
    $new_str = preg_replace_callback('/\{([^{}]*)\}/im', "get_random", $str);
    if ($new_str !== $str) $str = show_randomized($new_str);
    return $str;
}

Применимо к вашему текстовому файлу ... http://ideone.com/rkuf6

2 голосов
/ 31 июля 2011
  • уберите начальные и конечные фигурные скобки, вы можете использовать trim()
  • разбить получившуюся строку на |, используя explode()
  • использовать array_rand() длямассив, который вы имели на последнем шаге
1 голос
/ 31 июля 2011

Не будет работать с вложенными ({a | x {b | c} y | z})!

function doStuff($from){
    $to="";
    while(($pos=strpos($from,'{'))!==false){
        $to.=substr($from,0,$pos);
        $from=substr($from,$pos);
        $closepos=strpos($from,'}');
        $arr=explode('|',substr($from,1,$closepos-1));
        $to.=$arr[array_rand($arr)];
        $from=substr($from,$closepos+1);
    }
    return $to.$from;
}
...