我想知道。是否有與此有更好的表現:比使用多個語句更快地使用數組?
$value = preg_replace(array('/_{1,}/', '/-{2,}/'), array('_', '-'), $value);
比這
$value = preg_replace('/_{1,}/', '_', $value);
$value = preg_replace('/-{2,}/', '-', $value);
這只是一個很簡單的例子。
我想知道。是否有與此有更好的表現:比使用多個語句更快地使用數組?
$value = preg_replace(array('/_{1,}/', '/-{2,}/'), array('_', '-'), $value);
比這
$value = preg_replace('/_{1,}/', '_', $value);
$value = preg_replace('/-{2,}/', '-', $value);
這只是一個很簡單的例子。
正如我的測試代碼:
$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
非常感謝您的努力。 – insertusernamehere 2012-08-08 12:25:36
@insertusernamehere不客氣。順便說一下,你非常幫助我。我已經優化了我的項目的一小部分,這給了我近半秒的差異,這在目前情況下非常有價值。也謝謝你。 – Leri 2012-08-08 12:30:08
不錯,巧合。 :) – insertusernamehere 2012-08-08 12:35:31
使用小巴在評論中提到的microtime中()的測試方法,你看周圍性能差0.3秒。第二個例子是「更快」。
基於什麼?我試着做一個測試,第二個更快。 – 2012-08-08 12:08:36
我編輯了我的答案,以糾正我測試中的邏輯錯誤。這是使用microtime函數來回顯執行時間。第二個更快大約0.3秒。 – 2012-08-08 12:20:44
嗯好吧,不客氣;-) – 2012-08-08 12:22:02
要跟隨我創建在更換有事情做一個很簡單的例子調用:
$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
如預期的那樣沒有顯着差異 - 實際上根本沒有差別 - 因爲我們正在談論'大約一百萬個電話。另外有趣的是,第二個版本「稍微」更快。我想這是因爲創建並運行這些數組。
如果你的模式比這個例子更復雜,看一下'S'(study)[modifier](http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php) – 2012-08-08 12:13:51
這聽起來對真正複雜的問題很有意思。感謝您的提示。 – insertusernamehere 2012-08-08 12:20:34
有趣的是,我注意到我運行了兩個腳本,在我的情況下,數組的速度更快。
第一個測試
2.0891699790955
2.2491400241852
第二個測試
3.2192239761353
3.4498269557953
系統
PHP: 5.4.9
OS: Ubuntu的64
CPU: i7-3630QM
兩個詞:簡介它。 – deceze 2012-08-08 11:49:54
'$ start = microtime(true); //你的代碼;回聲microtime(true) - $ start;'。重複幾次,看看結果。 – Leri 2012-08-08 11:50:25
我在上面。給我一點時間。 :) – insertusernamehere 2012-08-08 12:00:33