2013-04-25 55 views
0

我有以下壓縮()函數:如何重寫這個compress()函數來不使用while()循環?

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個後續空格。

我想知道這是否會更快,更優化,如果使用正則表達式替換。但是,即使它會,我不知道該怎麼做。

任何想法?

回答

2

如何:

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

我相信會做你所建議,並沒有更多的。至於速度更快還是效率更高,你不得不進行一些測試,我不能隨便說。 preg_replace通常比較昂貴。我在這裏調用了兩次,所以有相當多的開銷。但這是你如何用p_r做到這一點的一個例子。