2013-09-24 35 views
0

最後,我找到了解決方案來獲得我想要的。唯一的問題是 - 這是將郵政編號轉換爲鏈接郵編的最快速和最好的方式嗎?PHP正則表達式這是獲得這個結果的最快方法嗎?

BTW:我是問的意見,在這個線程:PHP Regular expression with arrows (>>)

也許有人會覺得這個劇本非常有用。

$string = "Lorem lipsum >>86721678 texttexttexttexttext >>64356 >234234 9894823 text gdsfs>>54353<br /><br />"; 

    preg_match_all('!\>\>\d+!', $string, $matches); 
    $nowy = array(); 
    //getting each number modified 
    for ($i=0;$i<count($matches[0]);$i++) 
    { 
     $nowy[$i] = "<a href=''><font color='red'>".$matches[0][$i]."</font></a>"; 
    } 

    echo str_replace($matches[0], $nowy, $string); 

回答

0

只是快速測試,你的方法是使用5.50746917725E-5秒平均在我的電腦上。

我測試了這一點,因爲簡單和更好的可讀性:

echo preg_replace('!\>\>\d+!', "<a href=''><font color='red'>$0</font></a>", $string); 

其採用了3.00407409668E-5秒,所以幾乎是兩倍的速度。


注意:你不應該着眼於在這樣的操作性能,除非你通過數據的非常大的大塊。如果它不是人類明顯的,它應該是好的。

在這樣你應該專注於可讀性和邏輯,以及如何方便它是十個分量和修改這個代碼,如果你需要在今後的案件中,至少這是我的意見

此外,如果你想更好的性能測試用for循環包裝所有,並循環10000次或任何你認爲合適的,例如microtime()和/或memory_get_usage()

+0

謝謝很多人! –

0

試試這個:

<?php 
$string = "Lorem lipsum >>86721678 texttexttexttexttext >>64356 >234234 9894823 text gdsfs>>54353<br /><br />"; 

$string = preg_replace_callback("#>>\d+#", "replacewithlinks", $string); 
function replacewithlinks($matches) 
{ 

    return "<a href=''><font color='red'>".$matches[0]."</font></a>"; 
} 
echo $string; 
?> 
相關問題