2016-05-20 2 views
0

я следующая строкаPHP: манипуляция Строка выбора случайных

Make me {cum|cumm}.... mmmm {Phones|Phone's} {gonna|going to|going} 

Есть некоторые роли.

текст в фигурных скобках имеет одну трубу. Знак «|». означает одно из двух значений.

Если мы возьмем {Телефон | Телефон}, я хочу выбрать один из них случайным образом и может иметь более двух или трех значений или даже одно значение в фигурных скобках.

Таким образом, выше строка может привести к одному из следующих

  1. Заставь меня cumm .... Позор Телефоны собирается

  2. Заставь меня cumm .... мммм Телефон собирается

  3. Заставь меня кончить .... мммм телефоны идущие

  4. Сделай меня cumm .... мммм Телефон собирается

Обновление

я имел более длинный раствор

preg_match_all("~\{(.*?)\}~",$string,$matches); 

    foreach($matches[1] as $match) { 
     $options = explode("|", $match); 
     if(count($options) > 0) { 
      $key = array_rand($options); 
      $randomValue = $options[$key]; 

      $string = str_replace("{".$match."}", $randomValue, $string); 
     } 
    } 

    return $string; 

ответ

3

Использование preg_replace_callback функции, сплит матчей, и принять случайный элемент результирующего массива

$new = preg_replace_callback('/{([^}]+)}/', 
          function($i) { 
           $t = explode('|', $i[1]); 
           return $t[array_rand($t)]; }, 
          $string); 
echo $new; 
Смежные вопросы