You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
)

接下来咱们逐个处理这些数组元素:

  1. 先初始化一个空字符串存最终结果,把数组第一个元素先加进去(这里第一个是空,暂时不影响)
  2. 从第二个元素开始遍历:
    • 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:05:56