如何使用PHP计算CSV文件中同一日期和时间内发生的事件数

如何使用PHP计算CSV文件中同一日期和时间内发生的事件数,php,date,csv,count,Php,Date,Csv,Count,我需要计算CSV文件中同一日期和时间内发生的事件数 我在城市的一个偏远地区安装了一个实验项目,测量温度和湿度水平。它每5分钟与我通信(或应该)一次,向远程管理发送更新的IP地址(使用3G连接) 我需要计算它与我沟通的次数,以测量特定的气候变化 日志使用此格式(由选项卡分隔): 例如: 13/08 16H 3 Times 14/08 13H 1 Times 14/08 14H 1 Times 类似的内容更适合命令行脚本: grep '13/08/2011' file.csv|wc -l 我同意

我需要计算CSV文件中同一日期和时间内发生的事件数

我在城市的一个偏远地区安装了一个实验项目,测量温度和湿度水平。它每5分钟与我通信(或应该)一次,向远程管理发送更新的IP地址(使用3G连接)

我需要计算它与我沟通的次数,以测量特定的气候变化

日志使用此格式(由选项卡分隔):

例如:

13/08 16H 3 Times
14/08 13H 1 Times
14/08 14H 1 Times

类似的内容更适合命令行脚本:

grep '13/08/2011' file.csv|wc -l

我同意这更适合命令行脚本,但如果您不能使用,请传递日期。

您可以使用以下功能读取csv文件:

$count_by_date = array();

$fd = fopen('file.csv', 'r');
while ($fd && !feof($fd)) {
    $data = fgetcsv($fd, 0, "\t");

    list($date, $time) = explode(' ', $data[3]);

    if (!isset($count_by_date[$date])) {
        $count_by_date[$date] = 0;
    }
    $count_by_date[$date] ++;
}

嗨,马克,谢谢你的快速反馈。文件中会有多个日期,我应该提到这一点。我需要计算机器人每小时通信的次数(刚刚编辑),请参见上文。很抱歉,缺少信息!时间很容易添加:
grep'13/08/2011 16'file.csv | wc-l
@lipe:正如保罗所说,时间很容易添加。如果您需要进行更精细的切片/切割,那么最好将CSV吸入数据库,将文本时间戳转换为DB原生日期/时间字段,并在那里进行繁重的分组/匹配。做一次转换会更快。否则,你将浪费大量的cpu/磁盘时间加载/解析csv文件以执行你想运行的每个查询。嗨,Marc,我同意使用数据库来节省时间和硬件使用,但我对任何一个都不太熟悉,在一切正常后,我可以开始微调内容并清除代码。非常感谢您的反馈。是否有一个阈值CSV大小,以便按照Mark在对自己答案的评论中的建议导入到数据库中更好?(内存、cpu等)非常完美!只需将$date[3]更改为[2]即可获得正确的字段。谢谢大家!
$count_by_date = array();

$fd = fopen('file.csv', 'r');
while ($fd && !feof($fd)) {
    $data = fgetcsv($fd, 0, "\t");

    list($date, $time) = explode(' ', $data[3]);

    if (!isset($count_by_date[$date])) {
        $count_by_date[$date] = 0;
    }
    $count_by_date[$date] ++;
}