За последние 24 часа нас посетили 22670 программистов и 1013 роботов. Сейчас ищут 744 программиста ...

нужна функция поиска

Тема в разделе "PHP для новичков", создана пользователем andre2017, 13 авг 2017.

  1. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Здравствуйте, помогите пожалуйста разобраться в foreach - написать функцию поиска. Мне нужно найти между тегами <td> подстроки с ОГРН (id) для действующих предприятий. В файле только одно действующее предприятие и нужно распечатать для него ОГРН.

    файл такого типа:

    HTML:
    1. <tr>
    2.     <td>
    3.         <a href='?id=1061515009555'><br />   <small>ГАЗПРОМ  ОАО</small></a>
    4.     </td>
    5.     <td>Ликвидировано</td>
    6.     <td></td>
    7.     <td>02.06.2002</td>
    8.     <td>
    9.         <small>респ Северная Осетия - Алания, город Владикавказ</small>
    10.     </td>
    11.     <td>
    12.     </td>
    13. </tr><tr>
    14.     <td>
    15.         <a href='?id=1027700070518'>ПАО "ГАЗПРОМ"<br />
    16.         <small>ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ"</small></a>
    17.     </td>
    18.     <td>Действующее</td>
    19.     <td>7736050003</td>
    20.     <td>Миллер Алексей Борисович</td>
    21.     <td>25.02.1993</td>
    22.     <td>
    23.     </td>
    24.     <td>
    25.         <small>
    26.         </small>
    27.     </td>
    Я написал такую программу:
    PHP:
    1.   echo "<br />DATA ==================<br />";
    2.   echo $data;
    3.  
    4.   echo "<br />DUMP ===================<br />";
    5.   $temp  = preg_match_all('|<td>(.+)</td>|isU', $data, $arr);
    6.   var_dump($arr);
    7.  
    8.   echo "<br />TAGS ===================<br />";
    9.   echo $arr[0][0]." ".$arr[0][1]." ".$arr[0][2]." ".$arr[0][3];
    10.  
    11.   echo "<br />FOR ===================<br />";
    12.   for ($i=1; $i<40; $i++){
    13.   echo $arr[0][$i].'<br>';
    14.   }
    Она выдает следующий текст:
    Код (Text):
    1.  
    2. DATA ==================
    3. Название компании     Статус     ИНН     Руководитель     Дата регистрации     Адрес     ОКВЭД
    4.  
    5. ГАЗПРОМ ОАО     Ликвидировано     7736050003         02.06.2002     респ Северная Осетия - Алания, город Владикавказ  
    6. ПАО "ГАЗПРОМ"
    7. ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ"     Действующее     7736050003     Миллер Алексей Борисович     25.02.1993     117420, г Москва, улица Намёткина, дом 16     46.71 торговля оптовая
    8.  
    9. DUMP ===================
    10. array(2) { [0]=> array(13) { [0]=> string(95) "
    11. ГАЗПРОМ ОАО " [1]=> string(35) "Ликвидировано" [2]=> string(19) "7736050003" [3]=> string(31) " 02.06.2002" [4]=> string(119) " респ Северная Осетия - Алания, город Владикавказ " [5]=> string(41) " " [6]=> string(171) " ПАО "ГАЗПРОМ"
    12. ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ" " [7]=> string(31) "Действующее" [8]=> string(19) "7736050003" [9]=> string(55) "Миллер Алексей Борисович" [10]=> string(19) "25.02.1993" [11]=> string(96) " 117420, г Москва, улица Намёткина, дом 16 " [12]=> string(194) " 46.71 торговля оптовая " } [1]=> array(13) { [0]=> string(86) "
    13. ГАЗПРОМ ОАО " [1]=> string(26) "Ликвидировано" [2]=> string(10) "7736050003" [3]=> string(22) " 02.06.2002" [4]=> string(110) " респ Северная Осетия - Алания, город Владикавказ " [5]=> string(32) " " [6]=> string(162) " ПАО "ГАЗПРОМ"
    14. ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ" " [7]=> string(22) "Действующее" [8]=> string(10) "7736050003" [9]=> string(46) "Миллер Алексей Борисович" [10]=> string(10) "25.02.1993" [11]=> string(87) " 117420, г Москва, улица Намёткина, дом 16 " [12]=> string(185) " 46.71 торговля оптовая " } }
    15.  
    16. TAGS ===================
    17. ГАЗПРОМ ОАО Ликвидировано 7736050003 02.06.2002
    18.  
    19. FOR ===================
    20. Ликвидировано
    21. 7736050003
    22. 02.06.2002
    23. респ Северная Осетия - Алания, город Владикавказ
    24.  
    25. ПАО "ГАЗПРОМ"
    26. ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ"
    27. Действующее
    28. 7736050003
    29. Миллер Алексей Борисович
    30. 25.02.1993
    31. 117420, г Москва, улица Намёткина, дом 16
    32. 46.71 торговля оптовая..
    У меня три вопроса:
    1. Почему dump продублировал информацию, ведь в массиве она один раз записалась, я специально индекс аж до 40 увеличил - там ниче нет.
    2. Почему я не вижу id в выдаче? (и наименование ГАЗПРОМ для ликвидированного тоже отсутствует кстати)
    3. Как мне с помощью foreach выдать ОГРН (id = 1027700070518) для действующего предприятия?
     
  2. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
  3. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    нет. точно не туда. у меня задача проще.
     
  4. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Неужели никто не знает как написать однострочную функцию с использованием foreach?!
     
  5. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    нашел почему слово ГАЗПРОМ не выводилось - индекс не с нуля был задан.

    <td>
    <a href='?id=1061515009555'><br /> <small>ГАЗПРОМ ОАО</small></a>
    </td>

    Теперь появилось слово ГАЗПРОМ, в виде ссылки, а в ней ОГРН скрыт.
    То есть на экране у меня слово ГАЗПРОМ подчеркнутое, а ОГРН не видно...
    Как же выделить ОГРН?
     
    #5 andre2017, 14 авг 2017
    Последнее редактирование: 14 авг 2017
  6. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    В первом блоке кода у нас html с табличной разметкой.. откуда эта разметка берется? Вам надо спарсить данные с html страницы?
     
  7. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    это же не суть важно. это файл с тегами и все. берется со взломанного компа г-на Миллера наверное.
    я выше показал код, который парсит. сейчас нужно вытащить id нужный из ссылки
     
  8. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    PHP:
    1.   $temp = preg_match_all('|<td>(.+)</td>|isU', $data, $arr);
    2.   for ($i=0; $i<13; $i++){
    3.      if ($arr[1][$i]=="Действующее"){
    4.      $temp  = preg_match_all('|id=(.+)\'|isU', $arr[1][$i-1], $ogrn);
    5.       echo $ogrn[1][0];
    6.     }
    7.   }
    ну вот... день убил, но CАМ сделал: Эта программа выводит ОГРН 1027700070518 для действующего предприятия!
    Где же спецы по foreach?!
     
    denis01 нравится это.
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Тут: https://php.ru/manual/control-structures.foreach.html#82511

    @Abyss вам дал правильный ответ. То что вы решили сделать через задницу - это лишь ваша хотелка.
     
    denis01 нравится это.
  10. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    К сожалению у меня нет возможности изучать как работает foreach, а ссылку про
    DOMDocument::loadHTML я посмотрел, но не нашел ни одного примера использования этой функции, чтобы я мог извлечь нужные данные. Поэтому я и обращаюсь к специалистам на этом сайте (а Вы послали меня на буржуйский. юмор я оценил). Я не спец по PHP и не собираюсь его изучать.
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Тогда вам сюда.
     
  12. Emilien

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

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    PHP:
    1. $regex = "~
    2. <tr> \s* <td> \s*
    3. <a \s+ href='\?id=(\d+)'> (.+?) </a> \s*
    4. </td> \s* (*SKIP)
    5. <td>Действующее</td>
    6. ~sx";
    7.  
    8. preg_match_all($regex, $data, $matches, PREG_SET_ORDER);
    9. foreach($matches as $match) {
    10.     echo "<p>{$match[1]} {$match[2]}</p>";
    11. }
     
    andre2017 нравится это.
  13. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Cпасибо Emilien!