我有一个csv文件,它有四个字段,分别是时间、sip、dip和数据。
我需要找到所有以"10"开头的sip。如果sip相同,则添加所有数据字段并用sip显示值。
我已经尝试了下面的代码。但我如何搜索数组来检查sip是否相同,如果它们相同,则添加所有数据字段。
$lines =file('/files/cjsv.csv');
$records=array();
foreach($lines as $data)
{
list($time,$sip,$dip,$data)= explode(',',$data);
if(substr($sip, 0, 3 )=="10.")
{
echo $sip."=".$data."<br/>";
$records[$sip]=$data;
}
}
var_dump($records);
csv文件示例:
2014-10-31 23:34:24,17.172.208.49,10.101.224.170,500
2014-10-31 23:34:16,178.206.115.117,10.101.224.170,400
2014-10-31 23:34:23,10.101.16.218,17.167.138.38,200
2014-10-31 23:34:23,10.101.16.218,17.167.138.38,100
2014-10-31 23:34:24,54.249.250.113,10.101.13.22,80
2014-10-31 23:34:24,17.167.140.109,10.101.1.1,80
2014-10-31 23:34:24,134.170.188.84,10.101.1.1,80
2014-10-31 23:34:23,10.101.16.219,17.167.138.38,50
预期输出为:
10.101.16.218=300(200+100)
10.101.16.219=50
我测试了这段代码,它正在输出您想要的结果。。。
$lines =file('/files/cjsv.csv');
$records=array();
foreach($lines as $data)
{
list($time,$sip,$dip,$data)= explode(',',$data);
if(substr($sip, 0, 3 )=="10.")
{
//echo $sip."=".$data."<br/>";
$records[$sip] += $data; // changed this
}
}
var_dump($records);
输出:
array(2) {
["10.101.16.218"]=>
int(300)
["10.101.16.219"]=>
int(50)
}
我只将您的解决方案"$records[$sip]=$data;"
中的一个命令更改为"$records[$sip] += $data;"
。。。"="
将替换您记录的上一个值,其中"+="
将递增您想要的值。。。
如果您还有任何问题,请随时询问。。。
类似于:
if(key_exists($sip, $records){
$records[$sip] += $data;
} else {
$records[$sip] = $data;
}