我正在尝试从文本文件中读取数据并将其分配给数组。我怎样才能一次只读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