我有一个csv文件,它有四个字段,分别是time,sip,dip和data。
我需要找到以“10”开头的所有啜饮。如果sips相同,则添加所有数据字段并使用sip显示该值。
我已经尝试过以下代码。但是如何搜索数组以检查sips是否相同,如果相同则添加所有数据字段。
$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
答案 0 :(得分:1)
类似的东西:
if(key_exists($sip, $records){
$records[$sip] += $data;
} else {
$records[$sip] = $data;
}
答案 1 :(得分:1)
我测试了这段代码并输出了你想要的结果......
$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;"
... "="
将替换您在"+="
将增加值的前一个值,即您想...
随时问你是否还有其他问题......