将大.txt文件中的值存储到数组中



我有一个很大的.txt文件(73000行),我需要将该文件中的数据存储在一个数组中。

下面是一个文件外观的例子,它只是以这种方式重复,每一行都是这样的。

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;
}

这是一条路吗,还是有更好的路能给我更好的表现?

我用内存写,但使用了类似的东西

$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 );

就我个人而言,如果您正在处理巨大的文件,我会使用generatorsfile streams的组合。因此,您有了流,并使用生成器按需将其转换为数组,这样就不会耗尽内存。也许像这个

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

相关内容

  • 没有找到相关文章

最新更新