PHP找到类似的数组键和值的总和

时间:2014-11-07 12:51:18

标签: php csv foreach

我有一个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

2 个答案:

答案 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;" ... "="将替换您在"+="将增加值的前一个值,即您想...

随时问你是否还有其他问题......