查找兩個大文件(1G以上)的相同內容PHP版

這是是一個大文件處理,面試官出題的意圖並不但願你兩層for循環進行遍歷,這種答案確定是不會要的!php

這道題目的解法思路是:面試

  1. 順序讀取兩個文件的的所有記錄
  2. 將每條記錄通過hash->轉換爲10進制->%n後存到10個文件中,這樣一共2G的數據分紅10份,每份就是204.8M,低於內存限制
  3. 我能夠一次讀取一個文件,並用hash桶的方式獲得單個文件中的內容是否有重複,由於每條記錄都通過hash處理的,因此相同的記錄確定會在同一個文件中。
/** * 將兩個文件中的每條記錄經過hash求餘後分別存入10個文件中 * 若是某個文件太大,超過限制內存大小,則能夠對其再次hash求餘 */ $handler = fopen('file_a_AND_file_b', 'r'); while ($line = fgetc($handler)) { $save_to_file_name = crc32(hash('md5', $line)) % 10; file_put_contents($save_to_file_name, $line); }  /** * */ $files = [ '10個文件的路徑' ]; foreach ($files as $file) { $handler = fopen($file, 'r'); $tmp_arr = []; while($line = fgetc($handler)) { if(isset($tmp_arr[$line])) { file_put_contents('common_content.txt', $line); } else { $tmp_arr[$line] = true; } } }
相關文章
相關標籤/搜索