PHP:字符串操作选择随机

时间:2016-05-20 10:51:05

标签: php preg-replace

我有以下字符串

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

有一些角色。

大括号内的文本有一个管道符号“|”。表示两个值中的任何一个。

如果我们选择{Phone | Phone's},我想随机选择其中一个,它可以有大于两个或三个值,甚至大括号中的单个值。

所以上面的字符串可以导致以下

之一
  1. 让我成为...... mmmm手机

  2. 让我成为...... mmmm手机即将

  3. 让我暨.... mmmm手机

  4. 让我成为...... mmmm手机即将

  5. 更新

    我有一个更长的解决方案

    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;
    

1 个答案:

答案 0 :(得分:3)

使用preg_replace_callback函数,拆分匹配,并获取结果数组的随机元素

$new = preg_replace_callback('/{([^}]+)}/', 
                             function($i) { 
                               $t = explode('|', $i[1]); 
                               return $t[array_rand($t)]; }, 
                             $string);
echo $new;