重新排列文件中的行

时间:2012-01-05 14:01:41

标签: php arrays file input io

我正在尝试从文本文件中读取数据并将其分配给数组。我怎么能一次读出3行,然后将第一行分配给数组$ a,将第二行分配给数组$ b,将第三行分配给数组$ c?然后准确阅读3行等等。

5 个答案:

答案 0 :(得分: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 :(得分:1)

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

function file将所有行读入数组。

编辑二: 可以逐字节读取文件(虽然从我的观点来看是个坏主意)并在遇到每个\nPHP_EOL后停止并使用计数器或其他任何东西来管理它的使用方式。

编辑一个:

我刚才有了这个想法:你可以创建一个自定义的流包装器,并用它来处理读3到3行。它是一个很棒的文件工具,检查http://www.php.net/manual/en/class.streamwrapper.php,并通过上下文或变量控制它,或者什么都可以。

我猜你仍然需要找到一个算法。我还没有尝试过这个,但如果你处理它,请告诉我们。

答案 2 :(得分:1)

答案 3 :(得分: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];
}

答案 4 :(得分: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