Php处理器死了,PHP Spintax处理器

本文介绍了如何解决PHP中处理大型Spintax字符串导致的内存问题。传统方法在面对超过20KB的字符串时效率低下,作者提出了一种新的解决方案,即使用preg_replace_callback配合回调函数来随机替换花括号内的单词。这种方法能够处理Spintax选项间的空格问题,并且比简单的字符串操作更高效。通过示例代码展示了如何实现这一方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我一直在使用recurisve SpinTax处理器,如here所示,它适用于较小的字符串.但是,当字符串超过20KB时,它开始耗尽内存,这就成了一个问题.

如果我有这样的字符串:

{Hello|Howdy|Hola} to you, {Mr.|Mrs.|Ms.} {Smith|Williams|Austin}!

我希望将这些单词的随机组合放在一起,而不是使用上面链接中所见的技术(通过字符串递归直到花括号中没有更多的单词),我应该怎么做?

我在考虑这样的事情:

$array = explode(' ', $string);

foreach ($array as $k=>$v) {

if ($v[0] == '{') {

$n_array = explode('|', $v);

$array[$k] = str_replace(array('{', '}'), '', $n_array[array_rand($n_array)]);

}

}

echo implode(' ', $array);

但是当spintax的选项之间存在空格时,它就会崩溃. RegEx似乎是这里的解决方案,但我不知道如何实现它并且具有更高效的性能.

谢谢!

解决方法:

您可以创建一个使用回调函数来确定将创建和返回多个潜在变量的函数:

// Pass in the string you'd for which you'd like a random output

function random ($str) {

// Returns random values found between { this | and }

return preg_replace_callback("/{(.*?)}/", function ($match) {

// Splits 'foo|bar' strings into an array

$words = explode("|", $match[1]);

// Grabs a random array entry and returns it

return $words[array_rand($words)];

// The input string, which you provide when calling this func

}, $str);

}

random("{Hello|Howdy|Hola} to you, {Mr.|Mrs.|Ms.} {Smith|Williams|Austin}!");

random("{This|That} is so {awesome|crazy|stupid}!");

random("{StackOverflow|StackExchange} solves all of my {problems|issues}.");

标签:php,string,regex,spintax

来源: https://codeday.me/bug/20190725/1536637.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值