2012-01-05 134 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