如何重写此compress()函数以不使用while()循环?

时间:2013-04-25 21:15:59

标签: php php-5.3

我有以下compress()函数:

function compress($input){
   $from = array("\r\n", "\n");
   $to = array('', '');
   $output = str_replace($from, $to, $input);
   while(true){
      $output = str_replace("  ", " ", $output);
      if (strpos($output, "  ") === FALSE){
         break;
      }
   }
   return $output;
}

我正在使用它来压缩输出HTML代码,使其不包含任何换行符,也不会超过2个后续空格。

我想知道如果使用正则表达式替换,这会更快,更优化。但是,即使这样,我也不知道该怎么做。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

怎么样:

return preg_replace(
    '# {2,}#',
    '  ',
    preg_replace(
        '#\r?\n#s',
        '',
        $input
    )
);

我相信这会做你所建议的,而不是更多。至于它是更快还是更有效,你必须进行一些测试,我不能随便说。 preg_replace通常相对昂贵。我在这里打电话两次,所以有相当多的开销。但这是一个如何使用p_r来实现它的例子。