PHP найти похожие ключи массива и сумму значений

0

У меня есть файл csv, и у него есть четыре поля: время, глоток, падение и данные.

Мне нужно найти все глотки, которые начинаются с "10.". и если глотки одинаковы, добавьте все поле данных и отобразите значение с помощью 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

Ожидаемый результат:

300 = 10.101.16.218 (200 + 100)

10.101.16.219 = 50

Теги:
csv
foreach

2 ответа

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;"... "=" заменит предыдущее значение, которое вы записали, где "+=" увеличит значение, которое вы хотите...

не стесняйтесь спрашивать, есть ли у вас какие-либо дополнительные вопросы...

  • 1
    Спасибо за ваш ответ. Я починил это :)
1

Что-то вроде:

if(key_exists($sip, $records){
    $records[$sip] += $data;
} else {
    $records[$sip] = $data;
}
  • 0
    может быть, вы ссылались на array_key_exists или просто использовали isset
  • 0
    Нет, просто key_exists .. Но я нашел этот вопрос немного запутанным ..
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню