在PHP中,preg_split和explode哪个更快?

25

在使用PHP从搜索查询中提取关键词时,哪种方法更快:

$keyword = preg_split('/[\s]+/', $_GET['search']);
或者
$keyword = explode(' ', $_GET['search']);
3个回答

27

13
在简单的使用中,explode()比较快,详情请见: micro-optimization.com/explode-vs-preg_split (链接来自web.archive.org) 但是,preg_split的优势在于支持制表符 (\t) 和空格 (\s)。
元字符\s用于查找空白字符。
空白字符可以是 (http://php.net/manual/en/regexp.reference.escape.php):
  • 空格字符 (32 = 0x20)
  • 制表符 (9 = 0x09)
  • 回车符 (13 = 0x0D)
  • 换行符 (10 = 0x0A)
  • 换页符 (12 = 0x0C)

在这种情况下,您应该看到成本和收益。

提示:使用array_filter删除数组中的空项:

示例:

$keyword = explode(' ', $_GET['search']); //or preg_split
print_r($keyword);

$keyword = array_filter($arr, 'empty');
print_r($keyword);

注意:RegExp性能


explode函数也支持制表符。explode("\t",$string) - Forien
@Forien 我并没有说explode()不支持"tabs",我是说\spreg_split同时支持"space"和"tab"。 :) - Guilherme Nascimento
2
没问题,但我发现那句话有误导性 :) 在我看来,这里是最佳答案。 - Forien
1
在你的例子中,应该使用“explore”而不是“explode”。 - magento4u_com
在简单的使用中,explode()比其他方法更快。但是,有没有任何情况下,explode()不会更快呢? - eis
@eis 我在谈论需求,它的应用方式,函数本身总是比任何与正则表达式相关的东西,甚至是用PHP编写的自己的实现更快。我的意思是,在简单的需求中,使用explode函数就可以得到结果,如果需要复杂的东西,你需要让事情变得更加复杂,例如从不同的explode函数中循环。感谢您的评论。 - Guilherme Nascimento

7

一般规则:如果你可以不使用正则表达式完成某事,那就不要使用它们!

如果你想按空格拆分字符串,explode 的速度更快。


提示:explode()也适用于其他字符。 - Machavity
1
是的,我知道。但是如果他想按空格或制表符或换行符拆分,那就不太好了 :) - Forien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接