Доброго времени всем, пожалуйста, подскажите, кому не лень, на примере...
Если КОРОТКО: есть массив данных:
01.09.2016|10:48:31|192.168.0.1|Cвязь с сервером прервана.
01.09.2016|10:48:32|192.168.0.1|Cвязь с сервером прервана.
01.09.2016|10:48:36|192.168.0.1|Cвязь с сервером прервана.
01.09.2016|16:41:34|192.168.0.2|Cвязь с сервером прервана.
01.09.2016|18:47:06|192.168.0.2|Cвязь с сервером прервана.
Эксплодим по полям массива и получаем набор IP ниже по коду $fields[2], получаем набор IP адресов.
ВОПРОС: как узнать количество всех одинаковых IP, сколько 192.168.0.1, а сколько 192.168.0.2 ???
Насколько представляю себе, то: array_count_values(), как реализовать?
Подробно ниже: Есть скрипт берет текстовый лог, загоняет его в массив и выводит с него данные:
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP
$log = file('p_log/logping.txt', FILE_IGNORE_NEW_LINES
| FILE_SKIP_EMPTY_LINES
); $days = 20; // За сколько дней показывать лог
foreach($log as $row) {
$dateArray = explode('.', $fields[0
]); if($dateTime < $startDate)
continue;
if(!isset($res[$date][$fields[2
]])) $res[$date][$fields[2
]] = array(); $res[$date][$fields[2]][$dateTime] = $fields[3];
}
function getDay($year,$mon,$day)
{
$days = array("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"); $day = (int)$day; //если день двухсимвольный и <10
$mon = (int)$mon; //если месяц двухсимвольный и <10
$a = (int)((14 - $mon) / 12);
$y = $year - $a;
$m = $mon + 12 * $a - 2;
$d = (7000 + (int)($day+$y+ (int)($y/4) - (int)($y/100) + (int)($y/400) + (31*$m)/12))%7;
return $days[$d];
}
$html = '<table width="100%" border="1" cellspacing="0" cellpadding="0"><tr align="center"><td>';
$titles=array("'192.168.0.1'=> 'Офис 1', '192.168.0.2'=> Офис 2'");
for($i = 0; $i < $days; ++$i) {
@$year = date('Y', $date); @$mon = date('m', $date); @$day = date('d', $date); @$html .= '<b>Дата: ' . date('d.m.Y', $date) . ' - День: ' . @getDay
($year,$mon,$day) .' </b><br />'; foreach($res[$date] as $ip => $events) {
krsort($events, SORT_NUMERIC
);
$lastEventMSG = reset($events); $lastEventTS = key($events); $firstEventMSG = end($events); $firstEventTS = key($events);
echo $firstEventTS;
if ($firstEventTS == $lastEventTS)
{
$html .= '<b>'.$titles[$ip].' ошибка связи по IP: ' . $ip . ' = <font color="#822a2a">' . count($events) . '</font></b>, зафиксирована одна ошибка в: <b>'; @$html .= date('H:i:s', $firstEventTS) . '</b> [' .htmlspecialchars($firstEventMSG, NULL, 'windows-1251') . ']<br />';
}
else
{
$html .= '<b>'.$titles[$ip].' ошибки связи по IP: ' . $ip . ' = <font color="#822a2a">' . count($events) . '</font></b>, первая в: <b>'; @$html .= date('H:i:s', $firstEventTS) . '</b>, последняя в: <b>'; @$html .= date('H:i:s', $lastEventTS) . '</b> [' .htmlspecialchars($firstEventMSG, NULL, 'windows-1251') . ']<br />'; }
}
$html .= '<br />';
} else {
$html .= 'Ошибок связи до серверов на эту дату не обнаружено, либо лог не был загружен!<br /><br />';
}
}
echo $html;
?>