在数组中导入 csv,按给定的日期值或可能的 numrows 分解文本文件?

import csv in array's, explode text file by datevalue given or by numrows possible?

我有一个包含振动数据跟踪信号的 csv 文件。
它以 ISO 8601 日期 2017-01-31T16:16:21.000+01:00 开头 然后它有 1024 行数据(512Hz 2Sec 信号)。然后是下一个以新日期开始但在同一文件中的跟踪信号 -.-.

2017-01-31T16:16:21.000+01:00
0,06;0,03;0,01
0,07;0,03;0,01
0,07;0,03;0,02
.... up to line 1025
2017-01-31T16:24:37.000+01:00
1,72;0,2;-0,9
1,48;0,39;-1,46
1,23;0,58;-1,67
0,99;0,76;-1,81
... up to line 2050

这个文件可以包含 2 个以上的轨迹,我如何在单独的数组中传递它?我更喜欢这样的数组:

Array
    (    
[0] => Array
    (
[Time] => 2017-01-31T16:16:21.000
[Data] => array ( [0] => 0,06;0,03;0,01
                    [1] => 0,07;0,03;0,01 etc..)
)

但我不知道如何遍历文件并按日期时间值展开并使用它。另一种方法是将第一行读取为时间,然后逐行读取接下来的 1024 行并推送它,但是如何?

随着数组变大,您可能 运行 会遇到问题,但这是方法:

$i = $j = 0;

if($handle = fopen('/path/to/file.csv', 'r')) {
    while(($line = fgets($handle)) !== false) {
        if($i % 1025 === 0) {
            $j++;
            $result[$j]['Time'] = $line;
        } else {
            $result[$j]['Data'][] = $line;
        }
        $i++;
    }
}

只是循环遍历文件并测试它是第一行还是 1026 的倍数。如果是,那么你与时间在同一行,如果不是,那么就是数据。