5

不思議なんだけど。これでより良いパフォーマンスがありますか?

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

これより:

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

これは非常に単純な例です。

4

5 に答える 5

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

于 2012-08-08T11:59:01.937 に答える
2

PLB がコメントで言及した microtime() テスト メソッドを使用すると、約 0.3 秒のパフォーマンスの差が見られます。2番目の例は「より速い」です。

于 2012-08-08T11:59:55.220 に答える
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

予想どおり、100 万回の通話について話しているので、大きな違いはありません。実際にはまったく違いはありません。また、2 番目のバージョンが「わずかに」高速であることも興味深い点です。それらの配列を作成して実行しているためだと思います。

于 2012-08-08T12:10:55.633 に答える
0

興味深いことに、私は 2 つのスクリプトを実行しましたが、私の場合は配列を使用した方が高速でした。

最初のテスト

2.0891699790955

2.2491400241852


2回目のテスト

3.2192239761353

3.4498269557953


システム

PHP: 5.4.9

OS: Ubuntu x64

CPU: i7-3630QM

于 2013-10-18T08:13:11.493 に答える