2016-07-18 16 views
0

大きな.txtファイル(73000行)があり、そのファイルのデータを配列に格納する必要があります。大きい.txtファイルの値を配列に格納する

ここでは、ファイルがどのように表示されるかを例として示しています。このように、すべての行がこのように表示されます。

2016-05-27 11:04:16: QParRFSum=1574.00 QParRFSumMean=6.05 QParSuspSum=83.00 
2016-05-27 11:14:07: QParRFSum=1537.00 QParRFSumMean=5.91 QParSuspSum=96.00 
2016-05-27 11:14:07: QParRFSum=1537.00 QParRFSumMean=5.91 QParSuspSum=96.00 
2016-05-27 11:24:07: QParRFSum=1405.00 QParRFSumMean=5.40 QParSuspSum=0.00 
2016-05-27 11:24:07: QParRFSum=1405.00 QParRFSumMean=5.40 QParSuspSum=0.00 
2016-05-27 11:34:06: QParRFSum=1533.00 QParRFSumMean=5.90 QParSuspSum=89.00 
2016-05-27 11:34:06: QParRFSum=1533.00 QParRFSumMean=5.90 QParSuspSum=89.00 

そして、私はこのようなキーを使用して配列にこれを入れたいと思います:

Array (
[0] => 
(
    [date] => 2016-05-27 
    [time] => 11:04:16 
    [QParRFSum] => 1574.00 
    [QParRFSumMean] => 6.05 
    [QParSuspSum] => 83.00 
) 
[1] => 
(
    [date] => 2016-05-27 
    [time] => 11:14:07 
    [QParRFSum] => 1537.00 
    [QParRFSumMean] => 5.91 
    [QParSuspSum] => 96.00 
) 
[2] => 
(
    [date] => 2016-05-27 
    [time] => 11:14:07 
    [QParRFSum] => 1537.00 
    [QParRFSumMean] => 5.91 
    [QParSuspSum] => 96.00 
) 
) 
And so on... 

どのように私は心の中で性能を有する、最善の方法でこれを行うのでしょうか?

私は、file()関数とforeachループを使って、行単位で調べることを考えました。そして、何とかそれを私が望むアレイ構造に加工します。次のようなもの:

$txt=file('path/to/file'); 
foreach($txt as $line) 
{ 
    $RFAValues[] = $line; 
} 

これはやり方ですか、それとも良いパフォーマンスが得られる方法がありますか?

+0

のようなものを使用します。そうであれば、それを並べる必要はありません。なぜファイルを読んでDBに入れないのですか? –

答えて

1

のようなものは、私は私の記憶から書きましたが、私はほとんどあなたが一度にすべての73Kの行を必要と考えてい

$file = file_get_contents('file.txt'); 
$list = explode(PHP_EOL, $file); 
$_temp = []; 
foreach ($list as $row) 
{ 
    $_explode = explode(' ', $row); 
    $_temp[] = [ 
     'date' => $_explode[0], 
     'time' => rtrim($_explode[1], ':'), 
     'QParRFSum' => $_explode[2], 
     'QParRFSumMean' => $_explode[3], 
     'QParSuspSum' => $_explode[4] 
    ]; 
} 

var_dump($_temp); 
+0

たとえば、 'QParRFSum' => explode( "QParRFSum ="、$ _explode [2])などを使用してください。 – rad11

+0

はい、私は忘れました:) –

0

個人的には、巨大なファイルを処理する場合は、generatorsfile streamsの組み合わせを使用します。だからあなたのストリームがあり、あなたはメモリが不足しないように、ジェネレータを使用しての要求に応じての配列に変換します。多分これ

function readFromFile($fileName) { 
    $handle = @fopen("/tmp/inputfile.txt", "r"); 
    while (($line = fgets($handle, 4096)) !== false) { 
     //Process Line 
     yield $line; 
    } 
    fclose($handle); 
} 
関連する問題