簡體   English   中英

PHP查找相似的數組鍵和值的總和

[英]PHP find similar array keys and sum of the values

我有一個csv文件,它有四個字段,分別是時間,sip,dip和數據。

我需要找到所有以“ 10”開頭的小口。 如果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

就像是:

if(key_exists($sip, $records){
    $records[$sip] += $data;
} else {
    $records[$sip] = $data;
}

我測試了這段代碼,並輸出了想要的結果...

$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;" ... "="將替換您先前記錄的值,而"+="將增加您想要的值...

隨時詢問您是否還有其他問題...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM