【问题标题】:In PHP, which is faster: preg_split or explode?在 PHP 中,哪个更快:preg_split 还是 explode?
【发布时间】:2014-12-04 20:17:44
【问题描述】:

这听起来像是一个愚蠢的问题,但是:使用它在 php 中提取搜索查询中的关键字时更快:

$keyword = preg_split('/[\s]+/', $_GET['search']);

$keyword = explode(' ', $_GET['search']);

【问题讨论】:

    标签: php explode preg-split


    【解决方案1】:

    Explode is faster, per PHP.net

    提示如果您不需要正则表达式的强大功能,您可以选择更快(尽管更简单)的替代方法,例如 explode() 或 str_split()。

    【讨论】:

      【解决方案2】:

      在一个简单的用法中,explode() 比更快,请参阅:micro-optimization.com/explode-vs-preg_split (link from 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 Perfomance

      【讨论】:

      • explode 也可以支持标签。 explode("\t",$string)
      • @Forien 我不是说explode() 不支持“制表符”,我说\spreg_split 同时支持“空格”和“制表符”。 :)
      • 没问题,但我发现这句话有误导性:) 无论如何这里最好的答案恕我直言
      • 在你的例子中有探索而不是爆炸
      • “在简单的用法中,explode() 比更快” - 有没有 任何 用法,explode 不会更快?
      【解决方案3】:

      一般规则:如果您可以在没有正则表达式的情况下做某事,请在没有正则表达式的情况下做!

      如果你想用空格分割字符串,explode 会更快。

      【讨论】:

      • 提示:explode() 也适用于其他角色
      • 是的,我知道。但如果他想用空格、制表符或换行符分割,那就不好了:)
      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 2014-05-16
      • 2011-03-26
      • 2012-06-12
      • 2010-09-29
      • 2011-03-14
      • 2012-07-15
      相关资源
      最近更新 更多