2012-01-05 136 views
0

我正在尝试从文本文件中读取数据并将其分配给数组。我怎样才能一次只读3行,然后将第一行分配给数组$ a,将第二行分配给数组$ b,将第三行分配给数组$ c?然后再精确读取3条线,等等。重新安排文件中的行

+1

用fgets - > http://www.php.net/manual/en/function.fgets.php – ManseUK 2012-01-05 14:07:07

回答

2
$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的练习。

+1

它会是更好的使用'fgets'而不是缓冲它流的数据形成的文件... – 2012-01-05 14:08:47

+0

@WillVousden:我想这取决于正在读取的文件的平均大小,以确定流是否会产生任何明显的差异,但是没有提供该信息。 – FtDRbwLXw6 2012-01-05 14:10:54

1

您可以使用fseekfile_get_contents与maxlen参数。但要正确阅读3行,我实际上不知道,除非你知道这些行有多长。

函数file将所有行读入数组。

编辑二: 能读取字节的文件字节(虽然从我的角度来看一个坏主意),并停止你遇到的每个\nPHP_EOL后,用一个计数器或任何管理如何使用它。

编辑之一:

我刚刚得到这个想法:你可以创建一个自定义流包装,并处理您的读取行3乘3吧。这是一个很好的文件工具,检查http://www.php.net/manual/en/class.streamwrapper.php,并通过上下文或变量或任何事情来控制它。

我想你仍然必须为此找到一个算法。我还没有尝试过,但如果你处理它,请告诉我们。

1

你可以使用这样的事情,例如:

$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]; 
} 
1

我曾有过一个类似的问题。我像这样解决(伪代码)。

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