2012-08-08 17 views
5

我想知道。是否有與此有更好的表現:比使用多個語句更快地使用數組?

$value = preg_replace(array('/_{1,}/', '/-{2,}/'), array('_', '-'), $value); 

比這

$value = preg_replace('/_{1,}/', '_', $value); 
$value = preg_replace('/-{2,}/', '-', $value); 

這只是一個很簡單的例子。

+7

兩個詞:簡介它。 – deceze 2012-08-08 11:49:54

+1

'$ start = microtime(true); //你的代碼;回聲microtime(true) - $ start;'。重複幾次,看看結果。 – Leri 2012-08-08 11:50:25

+0

我在上面。給我一點時間。 :) – insertusernamehere 2012-08-08 12:00:33

回答

3

正如我的測試代碼:

$value = 'dfkjgnnfdjgnjnfdkgn dnf gnjknkxvjn jkngjsrgn'; 
$value1 = 'dfkjgnnfdjgnjnfdkgn dnf gnjknkxvjn jkngjsrgn'; 

$start = microtime(true); 
for ($i = 0; $i < 1000000; $i++) 
$value = preg_replace(array('/_{1,}/', '/-{2,}/'), array('_', '-'), $value); 
echo microtime(true) - $start.'<br>'; 

$start1 = microtime(true); 
for ($i = 0; $i < 1000000; $i++){ 
    $value1 = preg_replace('/_{1,}/', '_', $value1); 
    $value1 = preg_replace('/-{2,}/', '-', $value1); 
} 
echo microtime(true) - $start1; 

1.4254899024963

1.2811040878296

+0

非常感謝您的努力。 – insertusernamehere 2012-08-08 12:25:36

+2

@insertusernamehere不客氣。順便說一下,你非常幫助我。我已經優化了我的項目的一小部分,這給了我近半秒的差異,這在目前情況下非常有價值。也謝謝你。 – Leri 2012-08-08 12:30:08

+1

不錯,巧合。 :) – insertusernamehere 2012-08-08 12:35:31

2

使用小巴在評論中提到的microtime中()的測試方法,你看周圍性能差0.3秒。第二個例子是「更快」。

+0

基於什麼?我試着做一個測試,第二個更快。 – 2012-08-08 12:08:36

+0

我編輯了我的答案,以糾正我測試中的邏輯錯誤。這是使用microtime函數來回顯執行時間。第二個更快大約0.3秒。 – 2012-08-08 12:20:44

+0

嗯好吧,不客氣;-) – 2012-08-08 12:22:02

1

要跟隨我創建在更換有事情做一個很簡單的例子調用:

$value = '1_2__3___4____5_____6______1-2--3---4----5-----6------'; 

$s_1 = microtime(true); 
    for ($i = 0; $i < 1000000; ++$i) { 
     $r_1 = preg_replace(array('/_{2,}/', '/-{2,}/'), array('_', '-'), $value); 
    } 
$e_1 = microtime(true); 

$s_2 = microtime(true); 
    for ($i = 0; $i < 1000000; ++$i) { 
     $r_2 = preg_replace('/_{2,}/', '_', $value); 
     $r_2 = preg_replace('/-{2,}/', '-', $r_2); 
    } 
$e_2 = microtime(true); 

print $r_1; 
print $r_2; 
print $e_1 - $s_1; 
print $e_2 - $s_2; 

有了這樣的結果:

3.69554805756

3.2879319191

如預期的那樣沒有顯着差異 - 實際上根本沒有差別 - 因爲我們正在談論'大約一百萬個電話。另外有趣的是,第二個版本「稍微」更快。我想這是因爲創建並運行這些數組。

+0

如果你的模式比這個例子更復雜,看一下'S'(study)[modifier](http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php) – 2012-08-08 12:13:51

+0

這聽起來對真正複雜的問題很有意思。感謝您的提示。 – insertusernamehere 2012-08-08 12:20:34

0

有趣的是,我注意到我運行了兩個腳本,在我的情況下,數組的速度更快。

第一個測試

2.0891699790955

2.2491400241852


第二個測試

3.2192239761353

3.4498269557953


系統

PHP: 5.4.9

OS: Ubuntu的64

CPU: i7-3630QM