Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подсчет элементов массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alexpebody
Отправлено: 12 Октября, 2016 - 11:14:16
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Доброго времени всем, пожалуйста, подскажите, кому не лень, на примере...

Если КОРОТКО: есть массив данных:

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(), как реализовать?

Подробно ниже: Есть скрипт берет текстовый лог, загоняет его в массив и выводит с него данные:

Спойлер (Отобразить)


Смысл такой, этот скрипт вытаскивает и сортирует данные из вот этого лога:
Спойлер (Отобразить)


Тк я очень редко работаю с массивами, никак не могу вспомнить что и как закручено в скрипте, он выводит по дням, а мне надо за весь период, к примеру по IP 192.168.0.1, а в итоге Офис 1,
вывести сколько было ошибок. Нашел что поле $fields[2] в массиве из лога содержит все IP адреса, но как их посчитать сортируя по каждому адресу IP ума не приложу... Заранее всем СПАСИБО!!

В итоге нужен вид: Офис 1 - ошибок 100500, Офис 2 - ошибок 200500 и т.д., те за все дни в логе объединяя все ошибки и суммируя их.

(Отредактировано автором: 12 Октября, 2016 - 12:42:43)

 
 Top
Строитель Модератор
Отправлено: 12 Октября, 2016 - 14:06:05
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




alexpebody пишет:
надо за весь период, к примеру по IP 192.168.0.1, а в итоге вывести сколько было ошибок
Попробуйте так
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $arr = [
  4.     '01.09.2016|10:48:31|192.168.0.1|Cвязь с сервером прервана',
  5.     '01.09.2016|10:48:32|192.168.0.1|Cвязь с сервером прервана',
  6.     '01.09.2016|10:48:36|192.168.0.1|Cвязь с сервером прервана',
  7.     '01.09.2016|16:41:34|192.168.0.2|Cвязь с сервером прервана',
  8.     '01.09.2016|18:47:06|192.168.0.2|Cвязь с сервером прервана'
  9. ];
  10.  
  11. // Искомый IP
  12. $srch = '192.168.0.1';
  13.  
  14. $matches = array_filter($arr, function ($item) use ($srch) {
  15.     return preg_match('~'. preg_quote($srch) .'~', $item);
  16. });
  17.  
  18. if (!empty($matches)) {
  19.     $view = 'Всего ошибок: <b>'. count($matches) .'</b><hr />'.
  20.         '<table border="1" style="background-color:#EEE5AE;">'.
  21.         '<th>Дата</th><th>Время</th><th>IP</th><th>Сообщение</th>';
  22.  
  23.     foreach ($matches as $i => $v) {
  24.         list($date, $time, $ip, $mesg) = explode('|', $v);
  25.         $view .= ($i & 1 ? '<tr>' : '<tr style="background-color:#EEEEE0;">')
  26.             . '<td>'. $date .'</td><td>'. $time .'</td><td>'. $ip .'</td><td>'
  27.             . $mesg .'</td></tr>';
  28.     }
  29.  
  30.     $view .= '</table>';
  31. } else {
  32.     $view = 'Ошибок связи по IP: <b>'. $srch .'</b> не обнаружено!<br />';
  33. }
  34.  
  35. echo $view;

(Добавление)
alexpebody, в этом варианте искать можно по любому полю из массива (дата, время, или по IP)

(Отредактировано автором: 12 Октября, 2016 - 16:54:06)

 
 Top
alexpebody
Отправлено: 13 Октября, 2016 - 03:46:00
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Воу) БОЛЬШОЕ СПАСИБО, буду пробовать, вчера делал с array_count_values(),
но с фильтрами не допёр ) очень редко работаю с массивами... Еще раз СПАСИБО!

(Отредактировано автором: 13 Октября, 2016 - 07:08:23)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB