За последние 24 часа нас посетили 18838 программистов и 1702 робота. Сейчас ищут 723 программиста ...

Как добавить элемент TITLE в массив?

Тема в разделе "Прочие вопросы по PHP", создана пользователем AlexPebody, 14 май 2013.

  1. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Добрый день уважаемые комрады, помогите плз., нужно выполнить следующее, есть хороший скрипт:

    Содержание файла: logping.txt
    Код (Text):
    1.  
    2. 22.01.2013|8:58:31|170.44.76.168|Cвязь с сервером  прервана.
    3. 23.01.2013|0:47:14|170.41.65.167|Cвязь с сервером  прервана.
    4. 24.01.2013|8:49:22|175.30.96.210|Cвязь с сервером  прервана.
    5. 24.01.2013|8:50:24|172.41.91.210|Cвязь с сервером  прервана.
    6. 25.01.2013|8:51:25|171.42.92.200|Cвязь с сервером  прервана.
    7. 26.01.2013|8:52:27|170.40.90.200|Cвязь с сервером  прервана.
    8. и т.д.
    Исполняемый скрипт PHP:
    Код (Text):
    1. <?
    2. $log = file('p_log/logping.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    3. $days = 10;   // За сколько дней показывать лог
    4. $startDate = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - $days * 86400;
    5. $res = array();
    6. foreach($log as $row) {
    7.     $fields = explode('|', $row);
    8.     $dateArray = explode('.', $fields[0]);
    9.     $date = strtotime(implode('-', array_reverse($dateArray)));
    10.     $dateTime = strtotime(implode('-', array_reverse($dateArray)) . ' ' . $fields[1]);
    11.     if($dateTime < $startDate)
    12.         continue;
    13.     if(!isset($res[$date]))
    14.         $res[$date] = array();
    15.     if(!isset($res[$date][$fields[2]]))
    16.         $res[$date][$fields[2]] = array();
    17.     $res[$date][$fields[2]][$dateTime] = $fields[3];
    18. }
    19. $html = '<table width="100%" border="1" cellspacing="0" cellpadding="0"><tr align="center"><td>';
    20. for($i = 0; $i < $days; ++$i) {
    21.     $date = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - $i * 86400;
    22.     $html .= '<b>Дата ' . date('d.m.Y', $date) . '</b><br />';
    23.     if(isset($res[$date])) {
    24.         foreach($res[$date] as $ip => $events) {
    25.             krsort($events, SORT_NUMERIC);
    26.             $lastEvent = each($events);
    27.             $html .= '<b>Ошибки связи по IP: ' . $ip . ' = ' . count($events) . '</b>, последняя была зафиксирована в: <b>';
    28.             //$html .= date('d.m.Y в H:i', $lastEvent[0]) . '</b> [' . htmlspecialchars($lastEvent[1]) . ']<br />';
    29.             $html .= date('H:i:s', $lastEvent[0]) . '</b> [' . htmlspecialchars($lastEvent[1]) . ']<br />';
    30.         }
    31.         $html .= '<br />';
    32.     } else {
    33.         $html .= 'Ошибок связи до серверов на эту дату не обнаружено!<br /><br />';
    34.     }
    35. }
    36. echo($html)."</td></tr></table>";
    37. ?>
    Скрипт берет файл: logping.txt и из него создавая массив данных разбивает их и пр. -> по коду, вывод следующий: Дата 14.05.2013 Ошибки связи по IP: 170.40.60.160 = 1, последняя была зафиксирована в: 13:33:08 [Cвязь с сервером прервана.]

    ВОПРОС ВОТ В ЧЕМ, КАК ДОБАВИТЬ СВОЙСТВА К ВЫВОДИМЫМ IP??? Т.е. мне нужно чтобы выводился не только IP но и повесить на него (на каждый) определение, чтобы по наведению на каждый IP показывал, свой title

    Пожалуйста ПОДСКАЖИТЕ, как добавить эти свойства к каждому IP в массив (например на 170.44.76.168 title="Дом", 170.41.65.167 title="Работа" и пр.)??? БУДУ ОЧЕНЬ БЛАГОДАРЕН и НЕ ТОЛЬКО Я!!! :)
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    пример:
    Код (PHP):
    1. <?php
    2. for($i=1;$i<=10;$i++){
    3. $arr['title']= $i;
    4. $arr['ip']= $i.$i.$i.$i;
    5. $d[]=$arr;
    6. }
    Код (Text):
    1.  
    2. array(10) {
    3.   [0]=>
    4.   array(2) {
    5.     ["title"]=>
    6.     int(1)
    7.     ["ip"]=>"1111"
    8.   }
    9.   [1]=>
    10.   array(2) {
    11.     ["title"]=>
    12.     int(2)
    13.     ["ip"]=>"2222"
    14.   }
    15.   [2]=>
    16.   array(2) {
    17.     ["title"]=>
    18.     int(3)
    19.     ["ip"]=>"3333"
    20.   }
    21.   [3]=>
    22.   array(2) {
    23.     ["title"]=>
    24.     int(4)
    25.     ["ip"]=>"4444"
    26.   }
    27.   [4]=>
    28.   array(2) {
    29.     ["title"]=>
    30.     int(5)
    31.     ["ip"]=>"5555"
    32.   }
    33.   [5]=>
    34.   array(2) {
    35.     ["title"]=>
    36.     int(6)
    37.     ["ip"]=>"6666"
    38.   }
    39.   [6]=>
    40.   array(2) {
    41.     ["title"]=>
    42.     int(7)
    43.     ["ip"]=> "7777"
    44.   }
    45.   [7]=>
    46.   array(2) {
    47.     ["title"]=>
    48.     int(8)
    49.     ["ip"]=>"8888"
    50.   }
    51.   [8]=>
    52.   array(2) {
    53.     ["title"]=>
    54.     int(9)
    55.     ["ip"]=>"9999"
    56.   }
    57.   [9]=>
    58.   array(2) {
    59.     ["title"]=>
    60.     int(10)
    61.     ["ip"]=>"10101010"
    62.   }
    63. }
     
  3. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Можно еще вопросик последний ) в скрипте сортируется время ПОСЛЕДНЕЙ ошибки и выводится сейчас так: ла ла ла... ошибки связи по IP: 192.168.0.1 = 1, последняя была зафиксирована в: 13:33:08 [Cвязь с сервером прервана.], а как добавить чтобы было так:

    ла ла ла... ошибки связи по IP: 192.168.0.1 = 1, ПЕРВАЯ БЫЛА ЗАФИКСИРОВАНА В 12:00:00, последняя была зафиксирована в: 13:33:08 [Cвязь с сервером прервана.]

    Насколько я понимаю, в скрипте идет обработка: $lastEvent = each($events);, а вот как получить ПЕРВОЕ СОБЫТИЕ :) чето я не совсем догоняю.

    Поясню, вывод таков:
    14.05.2013|16:47:36|192.168.0.1|Cвязь с сервером прервана. - первое время в таблице по данному IP
    14.05.2013|19:01:56|192.168.0.1|Cвязь с сервером прервана. - последнее время в таблице по данному IP

    У меня в коде выводится последнее время ($lastEvent[0]), а как вывести еще и ПЕРВОЕ ВРЕМЯ 16:47:36???

    Добрые люди, подскажите плз., очень нужно чтобы скрипт выполнял все что требуется, ЗАРАНЕЕ БУДУ БЛАГОДАРЕН!!! ::wink24.gi
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    объявить переменную как нулевой тип данных. в процессе итерации сравнивать значение с нулевым типом данных - если да то записываем значение. запись значение приведет к тому что мы больше не сможем записать значение. значит там останется первое значение.
     
  5. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Можете пример привести по моему скрипту? Как вычислить НАЧАЛО периода в логе IP? Я честно не могу понять почему этих значений нет в массиве $lastEvent, т.к. нулевой ключик там это дата КОНЕЧНАЯ... Так вот... КАК ВЗЯТЬ НАЧАЛО ДАТЫ?

    Конечные же данные откуда то берутся в массиве, значит и начальные за период по сортировки по IP можно выудить???
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    AlexPebody, почта
     
  7. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Ответил, но луче для форумчан я думаю обсудить тут, т.к. многие может изберут куски кода или опыт, мне очень важно это решить, т.к. я сам уже много думал разных моделей, но то что я сделал, это не есть оптимизировано, хочется эту выдержку взять именно из модели массива, а не вводя массу переменных и обработчиков и сортировщиков. ))

    СПАСИБО!
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ок, я не стал в почте комментировать код. раз он вот такой вас устраивает то пожалуйста решение вашей задачи:
    Код (PHP):
    1. krsort($events, SORT_NUMERIC);
    2.            
    3. $lastEventMSG = reset( $events );
    4. $lastEventTS = key( $events );
    5.            
    6. $firstEventMSG = end( $events );
    7. $firstEventTS = key( $events );
    8.            
    9. $html .= '<b>Ошибки связи по IP: ' . $ip . ' = ' . count($events) .'</b>, последняя была зафиксирована в: <b>';
    10. $html .= date('H:i:s', $lastEventTS) . '</b> [' .htmlspecialchars($lastEventMSG) . '], первая: <b>';
    11. $html .= date('H:i:s', $firstEventTS) . '</b> [' .htmlspecialchars($firstEventMSG) . ']<br />'; 
     
  9. AlexPebody

    AlexPebody Активный пользователь

    С нами с:
    14 янв 2007
    Сообщения:
    247
    Симпатии:
    0
    Спасибо огромное!!! Я это делал но путями через foreach и статической выборкой, очень хотелось получить код именно выборкой из начала и конца массива, но что то не получалось... СПАСИБО ВАМ ОГРОМНОЕ!!! Сейчас прикручу пример к своему скрипту.