這幾天在做一個東西研究PHP讀取行數較多的文件(大概上百萬行)考慮到效率問題進行了簡單的研究總結如下
第一條file()函數的效率問題
file()函數的效率很底下 如果是有規律的文件比如每行一條相應數據那麼盡量不要是用file()函數
可以使用file_get_contents()然後用explode切割這樣效率會快三分之一
舉個例子:
文件樣式如下:
n
n
n
n
n
n
nnnnnnnnnnnn
如果用file($file)讀入的話耗時很長
可以用如下方法explode("n"file_get_contents($file));效率會快很多
第二條數組的遍歷方式
數據已經被讀入數組了下面就是遍歷了
我所需要的是確定數組中有無一個值的存在比如說是否在數組中首先想到的是in_array()
不過實驗了下發現效率很低下於是參考別人的代碼想到一個辦法把數組翻轉過來變成所有值都為原來的值變成了索引那麼只要我在if裡寫($arr[索引]==)去判斷果然效率高出很多
在數組的遍歷過程中如果數組個頭非常大並且數組中的數據並不是全能用到的話最好把用來遍歷的數組抽出來這樣會提高很多效率
第三條數組的存儲
把計算過後的數據保存起來存在一個文件中考慮了三種方法一種是直接寫成php文件一種是serialize一種是json串
第一種方式
直接寫入文件保存成PHP
需要的時候直接require進來
第二種方式把變量serialize然後file_put_contents()進入文件使用的時候unserialize就ok
第三種方式和第二種類似只不過寫成了json串
經過測試發現第二種效率最高第三種其次和第二種效率不相上下第一種最慢和我預想的差距很大真是大跌眼鏡
From:http://tw.wingwit.com/Article/program/PHP/201311/21126.html