PHP数组取值、随机词生成与字符串分割:实现大括号内容随机替换
实现大括号内内容的随机替换
嘿,我懂你要做的事儿——把字符串里用大括号包裹、竖线分隔的可选内容,每次随机挑一个替换掉,对吧?你已经用explode('{', $x)把字符串拆成数组了,接下来咱们一步步把它变成能随机生成的句子:
步骤拆解与代码实现
就拿你给的示例字符串来演示:
$x = '{Please,|Just|If you can,} make so, that this {incredible|cool|simple|important|useless} sentence {fast|correctly|instantly} changed randomly every time';
当你执行$parts = explode('{', $x);后,得到的数组结构是这样的:
Array ( [0] => [1] => Please,|Just|If you can,} make so, that this [2] => incredible|cool|simple|important|useless} sentence [3] => fast|correctly|instantly} changed randomly every time )
接下来咱们逐个处理这些数组元素:
- 先初始化一个空字符串存最终结果,把数组第一个元素先加进去(这里第一个是空,暂时不影响)
- 从第二个元素开始遍历:
- 用
explode('}', $part, 2)把每个元素拆成「可选内容组」和「后面的固定文本」两部分(限制拆2份,避免内容里意外出现}的情况) - 把可选内容组用
|拆成数组,用array_rand()随机选一个索引,拿到随机值 - 把随机值和后面的固定文本拼起来,追加到结果里
- 用
完整代码如下:
$x = '{Please,|Just|If you can,} make so, that this {incredible|cool|simple|important|useless} sentence {fast|correctly|instantly} changed randomly every time'; $parts = explode('{', $x); $result = $parts[0]; // 先拿到第一个部分(示例里是空字符串) // 从第二个元素开始处理每个带选项的片段 for ($i = 1; $i < count($parts); $i++) { // 拆分选项组和后续固定文本 $split = explode('}', $parts[$i], 2); // 做个容错判断,避免没找到}的情况报错 if (count($split) !== 2) { $result .= $parts[$i]; continue; } list($optionsStr, $rest) = $split; // 把选项拆成数组 $options = explode('|', $optionsStr); // 随机选一个选项 $randomOption = $options[array_rand($options)]; // 拼到结果里 $result .= $randomOption . $rest; } // 每次运行都会输出不同的句子 echo $result;
额外小提示
如果你的字符串里可能存在未闭合的{,上面代码里的容错判断会直接把那段内容原样保留,不会让脚本报错,实用性更强~
内容的提问来源于stack exchange,提问作者Anna Kurmanova
相关产品推荐
相关产品推荐

