對{php中關於處理字符串時效率的討論}的改進

今天看了,一篇同樣來自csdn的blog,我自己多事,做了一點測試,在其中發現了一些問題,寫了下面這篇:

以下虛線部分來自arcow 的 Blog:

------------------------------------------------------------------------------------------------------------------

有一堆類似以下變量$abc的字符串,末尾都多出來了一個,(逗號),我想去掉末尾的逗號,爲了驗證不同的處理方法的執行時間,以下是我寫的一個對比程序進行試驗:

程序一,利用substr
<?php
function getmicrotime(){ 
        list($usec, $sec) = explode(" ",microtime()); 
        return ((float)$usec + (float)$sec); 
    }
    
$time_start = getmicrotime();

$abc="重慶,萬州,涪陵,渝中,大渡口,江北,沙坪壩,九龍坡,南岸,北碚,萬盛,雙撟,渝北,巴南,黔江,長壽,綦江,潼南,銅梁,大足,榮昌,壁山,梁平,城口,豐都,墊江,武隆,忠縣,開縣,雲陽,奉節,巫山,巫溪,石柱,";

$l=strlen($abc);
$abc=substr($abc,0,$l-1);
echo $abc."<br>";
$time_end = getmicrotime();
echo ($time_end-$time_start)*1000;
?>

程序二,利用正則表達式
<?php
function getmicrotime(){ 
        list($usec, $sec) = explode(" ",microtime()); 
        return ((float)$usec + (float)$sec); 
    }
    
$time_start = getmicrotime();

$abc="重慶,萬州,涪陵,渝中,大渡口,江北,沙坪壩,九龍坡,南岸,北碚,萬盛,雙撟,渝北,巴南,黔江,長壽,綦江,潼南,銅梁,大足,榮昌,壁山,梁平,城口,豐都,墊江,武隆,忠縣,開縣,雲陽,奉節,巫山,巫溪,石柱,";

$abc=str_replace(",$","",$abc);
echo $abc."<br>";
$time_end = getmicrotime();
echo ($time_end-$time_start)*1000;
?>

結果程序一的執行平均時間爲0.045,程序二的執行平均時間爲0.085。不進行任何處理的平均執行時間爲0.041
可見利用第一種方法處理效率要高出盡50%
由此,我們在做程序的過程中,尤其是在要求高效的程序中,我們應該對不同的方法進行一下對比,找出最優化的處理方法。

-------------------------------------------------------------------------------------------------------------------

在這個例子中:

關鍵之處在於例一中的:

/*$l=strlen($abc);
$abc=substr($abc,0,$l-1);
*/

例二中的:

/*$abc=str_replace(",$","",$abc);*/

這個地方顯然存在可以再改進的地方:

substr()方法中,第三個參數如果用負數的話,php會自動從string的最後開始記數,據此,可以修改此方法如下:

$abc=substr($abc,0,-1);

即可。

故整個程序改爲:

程序改進的substr
<?php
function getmicrotime(){ 
        list($usec, $sec) = explode(" ",microtime()); 
        return ((float)$usec + (float)$sec); 
    }
    
$time_start = getmicrotime();

$abc="重慶,萬州,涪陵,渝中,大渡口,江北,沙坪壩,九龍坡,南岸,北碚,萬盛,雙撟,渝北,巴南,黔江,長壽,綦江,潼南,銅梁,大足,榮昌,壁山,梁平,城口,豐都,墊江,武隆,忠縣,開縣,雲陽,奉節,巫山,巫溪,石柱,";

$abc=substr($abc,0,-1);
echo $abc."<br>";
$time_end = getmicrotime();
echo ($time_end-$time_start)*1000;
?>

另外:在我實際的測試中發現:

結果程序一的執行平均時間爲0.049,程序二的執行平均時間爲0.017,程序三的執行平均時間爲0.012

執行處理效率,不言自明!

再羅嗦一點:
不知原作者的平均時間和”可見利用第一種方法處理效率
要高出盡50%“的結論是怎麼得到的?

在此,只想提交我個人的一點測試結論,僅供參考,無其他!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章