0

我正在尝试为我的网站编写一个 php 脚本,该脚本将允许我使用自旋语法将单词(预定义)注入段落中。我只是不确定如何在一个脚本中多次执行此操作。例如,我有这样一段:

{fat|pudgy|lazy} 狗 {sleeps|rest|poops} 整天。

我试图让脚本访问 {text 1|text 2} 大括号之间的每组文本,然后随机选择要使用的变量(用管道分隔)。完成后,它将吐出字符串的许多变体,例如:

  1. 肥狗整天睡觉。
  2. 懒狗整天拉屎。等等。

我可以在 {} 括号中访问文本的第一个实例,然后旋转它,但我只是不知道如何一口气多次执行。有人做过吗?

这是我的脚本,用于访问前两个 {} 括号之间的第一个文本实例。

function get_between ($text, $s1, $s2) {
    $spinText = "";
    $pos_s = strpos($text,$s1);
    $pos_e = strpos($text,$s2);
    for ( $i=$pos_s+strlen($s1) ; (( $i<($pos_e)) && $i < strlen($text)) ; $i++ ) {
            $spinText .= $text[$i];
    }
    return $spinText;
}
$str = "The {fat|pudgy|lazy} dog {sleeps|rest|poops} all day long.";
$spinTextFinal = get_between($str,"{","}");

$spinTextFinalExplode = explode("|",$spinTextFinal);
print_r($spinTextFinalExplode);
4

2 回答 2

1

解决方案1:您可以使用preg_replace_callback

$str = "The {fat|pudgy|lazy} dog {sleeps|rest|poops} all day long.";
echo "<pre>";
for($i = 0; $i < 10; $i ++) {
    echo get_between($str, "{", "}"), PHP_EOL;
}

输出

The fat dog rest all day long.
The lazy dog poops all day long.
The fat dog sleeps all day long.
The lazy dog sleeps all day long.
The lazy dog poops all day long.
The lazy dog poops all day long.
The pudgy dog rest all day long.
The pudgy dog rest all day long.
The fat dog poops all day long.
The fat dog rest all day long.

修改功能

function get_between($text, $s1, $s2) {
    $text = preg_replace_callback(sprintf("/%s(.*?)%s/", preg_quote($s1), preg_quote($s2)), function ($m) {
        $l = explode("|", $m[1]);
        return $l[array_rand($l)];
    }, $text);
    return $text;
}

解决方案 2只使用数组

$arr1 = array("fat","pudgy","lazy");
$arr2 = array("sleeps","rest","poops");
$str = "The %s dog %s all day long.";
echo sprintf($str,$arr1[array_rand($arr1)],$arr1[array_rand($arr1)]);
于 2012-12-12T19:08:53.667 回答
0

弄清楚了 :)

$str = "The {fat|pudgy|lazy} dog {sleeps|rest|poops} all day long.";
$start_string ='{';
$stop_string = '}';
preg_match_all('/' . $start_string. '(.*)' . $stop_string . '/Usi' , $str, $strings); 
foreach($strings[1] as &$value){
    $explodePhrase = explode("|",$value);
    $key = array_rand($explodePhrase);
    $valueX = $explodePhrase[$key];
    $string[$value] = $valueX; 
}
foreach($string as $key => $value){
    $str = str_replace($key,$value,$str);
    $str = $str; 
}
echo $str; 
于 2012-12-12T18:50:40.917 回答