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


PHP find similar array keys and sum of the values

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