我正在嘗試從文本文件中讀取數據並將其分配給數組。我怎樣才能一次只讀3行,然後將第一行分配給數組$ a,將第二行分配給數組$ b,將第三行分配給數組$ c?然後再精確讀取3條線,等等。重新安排文件中的行
回答
$lines = file('some_file.txt');
$numLines = count($lines);
for ($i = 0; $i < $numLines; $i += 3) {
$a[] = $lines[$i];
$b[] = $lines[$i + 1];
$c[] = $lines[$i + 2];
}
請注意,您還需要進行一些超出界限的索引錯誤檢查。我將其作爲OP的練習。
它會是更好的使用'fgets'而不是緩衝它流的數據形成的文件... – 2012-01-05 14:08:47
@WillVousden:我想這取決於正在讀取的文件的平均大小,以確定流是否會產生任何明顯的差異,但是沒有提供該信息。 – FtDRbwLXw6 2012-01-05 14:10:54
您可以使用fseek
或file_get_contents
與maxlen參數。但要正確閱讀3行,我實際上不知道,除非你知道這些行有多長。
函數file
將所有行讀入數組。
編輯二: 能讀取字節的文件字節(雖然從我的角度來看一個壞主意),並停止你遇到的每個\n
或PHP_EOL
後,用一個計數器或任何管理如何使用它。
編輯之一:
我剛剛得到這個想法:你可以創建一個自定義流包裝,並處理您的讀取行3乘3吧。這是一個很好的文件工具,檢查http://www.php.net/manual/en/class.streamwrapper.php,並通過上下文或變量或任何事情來控制它。
我想你仍然必須爲此找到一個算法。我還沒有嘗試過,但如果你處理它,請告訴我們。
爲fgets
的例子應該給你一些想法:
http://php.net/manual/en/function.fgets.php#refsect1-function.fgets-examples
你可以使用這樣的事情,例如:
$lines = file('filename');
$chunks_array = array_chunk($lines, 3)); - this create array of arrays with 3 lines each
foreach ($chunks_array as $chunks)
{
$a[] = $chunks[0];
$b[] = $chunks[1];
$c[] = $chunks[2];
}
我曾有過一個類似的問題。我像這樣解決(僞代碼)。
counter = 1;
while reading
switch counter
case 1: store in the first array then break;
case 2: store in the second array then break;
case 3: store in the third array, counter = 0, then break;
counter++;
end-while
- 1. 重新安排表中TSQL
- 2. 重新安排表
- 3. 的Python:重新安排串
- 4. SQL - 如何重新安排一組行
- 5. 重新安排大型XML文檔
- 6. 重新運行(重新安排)一次性管道
- 7. MySQL:對文件關聯中的行重新排序
- 8. 在python中重新排序文件名
- 9. 重新安排數據幀
- 10. 需要重新安排JSON
- 11. 如何重新安排JobScheduler?
- 12. 重新安排numpy陣列
- 13. 重新安排每組
- 14. PHP陣列重新安排
- 15. 重新安排node.js任務
- 16. 重新排序行
- 17. 在33,000行文件中重複排序
- 18. 重新安排JSON文件(使用鄰接矩陣)
- 19. 安排文件執行的腳本
- 20. 如何在Python中重新排列文本文件中不同行的數字?
- 21. UITableViewController中的行的重新排序
- 22. 爲什麼不重新安排Intellij中Kotlin文件的代碼工作?
- 23. MYSQL:如何「重新安排」的表格
- 24. 重新安排計時器在Android的
- 25. Sidekiq - 重新安排失敗的作業
- 26. 通過svn的劇烈重新安排
- 27. 重新排序data.frame中的行嗎?
- 28. awk來重新安排在執行數據日誌行
- 29. 如何重新排序60mb CSV文件
- 30. 重新排列數據文件
用fgets - > http://www.php.net/manual/en/function.fgets.php – ManseUK 2012-01-05 14:07:07