php筆記之:有規律大檔案的讀取與寫入的分析

來源:互聯網
上載者:User

這幾天在做一個東西.研究PHP讀取行數較多的檔案(大概上百萬行).考慮到效率問題.進行了簡單的研究.總結如下

第一條.file()函數的效率問題.

file()函數的效率很底下 如果是有規律的檔案.比如每行一條相應資料.那麼盡量不要是用file()函數

可以使用file_get_contents()然後用explode切割.這樣效率會快三分之一

舉個例子:

檔案樣式如下:

11111\n

22222\n

33333\n

44444\n

55555\n

.....\n

nnnnnnnnnnn\n

如果用file($file)讀入的話.耗時很長.

可以用如下方法explode("\n",file_get_contents($file));效率會快很多.

第二條,數組的遍曆方式.

資料已經被讀入數組了.下面就是遍曆了.

我所需要的是確定數組中有無一個值的存在,比如說44444是否在數組中.首先想到的是in_array()

不過實驗了下發現效率很低下.於是參考別人的代碼想到一個辦法.把數組翻轉過來.變成所有值都為1.原來的值變成了索引.那麼只要我在if裡寫($arr[索引]==1)去判斷.果然效率高出很多.

在數組的遍曆過程中.如果數組個頭非常大,並且數組中的資料並不是全能用到的話,最好把用來遍曆的數組抽出來.這樣會提高很多效率.

第三條,數組的儲存.

把計算過後的資料儲存起來.存在一個檔案中.考慮了三種方法.一種是直接寫成php檔案.一種是serialize,一種是json串.

第一種方式

直接寫入檔案<?php 串連var_export($var)串連";"串連?>儲存成PHP

需要的時候直接require進來.

第二種方式.把變數serialize然後file_put_contents()進入檔案.使用的時候unserialize就ok.

第三種方式和第二種類似.只不過寫成了json串.

經過測試.發現第二種效率最高.第三種其次.和第二種效率不相上下.第一種最慢.和我預想的差距很大.真是大跌眼鏡.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.