У меня есть файл 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
Я проверил этот код и выдал результат, который вы хотите...
$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;
}
array_key_exists
или просто использовали isset