ホームページ >バックエンド開発 >PHPチュートリアル >PHP 文字列の単一文字操作 - substr は非常に遅い

PHP 文字列の単一文字操作 - substr は非常に遅い

WBOY
WBOYオリジナル
2016-06-13 13:03:45975ブラウズ

PHP 文字列のシングルバイト操作 - substr は非常に遅い

文字列内の1バイトを操作したい場合、どのような方法を使用すればよいでしょうか?私はいつも、substr 関数はそれほど遅くないだろうと思っていました。しかし今日テストしてみたところ、違うことが分かりました。以下はテストコードです:

?

<?php
    $str='abcdefghijklmnopqrstuvwxyz1234567890';
    error_reporting(E_ALL);
    /**
     * Simple function to replicate PHP 5 behaviour
     */
    function microtime_float()
    {
        list($usec, $sec) = explode(" ", microtime());
        return ((float)$usec + (float)$sec);
    }
    //使用substr函数
    $start=microtime_float();
    for ($k = 100; $k > 0; $k--) { 
        for ($i=0;$i<strlen($str);$i++)
           echo substr($str,$i,1), ' ';
    }
    $end = microtime_float();
    echo("<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> t i m e :" .  round( $end - $start ,6) ."<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>");

    

   //使用字节操作
    $start=microtime_float();
    for ($k = 100; $k > 0; $k--) {   
        for ($i=0;$i<strlen($str);$i++)
           echo $str{$i}, ' ';
    }
   $end = microtime_float();

    echo("<br/> <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>t i m e :" .  round( $end - $start ,6) ."<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>");
    
    
    //使用数组模式操作
    $start=microtime_float();
    for ($k = 100; $k > 0; $k--) {    
        for ($i=0;$i<strlen($str);$i++)
           echo $str[$i], ' ';
    }
    $end = microtime_float();

    echo("<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> t i m e :" .  round( $end - $start ,6) ."<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>");
    
    

?>

?テスト結果は次のとおりです:

時間:0.003782
時間:0.002862
時間:0.002587

時間:0.00351
時間:0.002649
時間:0.002786

substr の速度が非常に遅いことがわかります。バイト演算モードと配列演算モードは同じレベルです。このことから、文字列に対してバイト操作を実行する場合は、バイト操作モードを使用するのが最善であると考えられます。この方法を使用すると、変数の型が配列であるという誤った認識につながることがないからです。
もちろん、この操作方法には制限があります。つまり、中国語の文字列はこの方法では処理できず、mb_substr のみを使用できます!!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。