Здравствуйте, помогите пожалуйста разобраться в foreach - написать функцию поиска. Мне нужно найти между тегами <td> подстроки с ОГРН (id) для действующих предприятий. В файле только одно действующее предприятие и нужно распечатать для него ОГРН. файл такого типа: HTML: <tr> <td> <a href='?id=1061515009555'><br /> <small>ГАЗПРОМ ОАО</small></a> </td> <td>Ликвидировано</td> <td></td> <td>02.06.2002</td> <td> <small>респ Северная Осетия - Алания, город Владикавказ</small> </td> <td> </td> </tr><tr> <td> <a href='?id=1027700070518'>ПАО "ГАЗПРОМ"<br /> <small>ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ"</small></a> </td> <td>Действующее</td> <td>7736050003</td> <td>Миллер Алексей Борисович</td> <td>25.02.1993</td> <td> </td> <td> <small> </small> </td> Я написал такую программу: PHP: echo "<br />DATA ==================<br />"; echo $data; echo "<br />DUMP ===================<br />"; $temp = preg_match_all('|<td>(.+)</td>|isU', $data, $arr); var_dump($arr); echo "<br />TAGS ===================<br />"; echo $arr[0][0]." ".$arr[0][1]." ".$arr[0][2]." ".$arr[0][3]; echo "<br />FOR ===================<br />"; for ($i=1; $i<40; $i++){ echo $arr[0][$i].'<br>'; } Она выдает следующий текст: Код (Text): DATA ================== Название компании Статус ИНН Руководитель Дата регистрации Адрес ОКВЭД ГАЗПРОМ ОАО Ликвидировано 7736050003 02.06.2002 респ Северная Осетия - Алания, город Владикавказ ПАО "ГАЗПРОМ" ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ" Действующее 7736050003 Миллер Алексей Борисович 25.02.1993 117420, г Москва, улица Намёткина, дом 16 46.71 торговля оптовая DUMP =================== array(2) { [0]=> array(13) { [0]=> string(95) " ГАЗПРОМ ОАО " [1]=> string(35) "Ликвидировано" [2]=> string(19) "7736050003" [3]=> string(31) " 02.06.2002" [4]=> string(119) " респ Северная Осетия - Алания, город Владикавказ " [5]=> string(41) " " [6]=> string(171) " ПАО "ГАЗПРОМ" ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ" " [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) " ГАЗПРОМ ОАО " [1]=> string(26) "Ликвидировано" [2]=> string(10) "7736050003" [3]=> string(22) " 02.06.2002" [4]=> string(110) " респ Северная Осетия - Алания, город Владикавказ " [5]=> string(32) " " [6]=> string(162) " ПАО "ГАЗПРОМ" ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ" " [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 торговля оптовая " } } TAGS =================== ГАЗПРОМ ОАО Ликвидировано 7736050003 02.06.2002 FOR =================== Ликвидировано 7736050003 02.06.2002 респ Северная Осетия - Алания, город Владикавказ ПАО "ГАЗПРОМ" ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "ГАЗПРОМ" Действующее 7736050003 Миллер Алексей Борисович 25.02.1993 117420, г Москва, улица Намёткина, дом 16 46.71 торговля оптовая.. У меня три вопроса: 1. Почему dump продублировал информацию, ведь в массиве она один раз записалась, я специально индекс аж до 40 увеличил - там ниче нет. 2. Почему я не вижу id в выдаче? (и наименование ГАЗПРОМ для ликвидированного тоже отсутствует кстати) 3. Как мне с помощью foreach выдать ОГРН (id = 1027700070518) для действующего предприятия?
нашел почему слово ГАЗПРОМ не выводилось - индекс не с нуля был задан. <td> <a href='?id=1061515009555'><br /> <small>ГАЗПРОМ ОАО</small></a> </td> Теперь появилось слово ГАЗПРОМ, в виде ссылки, а в ней ОГРН скрыт. То есть на экране у меня слово ГАЗПРОМ подчеркнутое, а ОГРН не видно... Как же выделить ОГРН?
В первом блоке кода у нас html с табличной разметкой.. откуда эта разметка берется? Вам надо спарсить данные с html страницы?
это же не суть важно. это файл с тегами и все. берется со взломанного компа г-на Миллера наверное. я выше показал код, который парсит. сейчас нужно вытащить id нужный из ссылки
PHP: $temp = preg_match_all('|<td>(.+)</td>|isU', $data, $arr); for ($i=0; $i<13; $i++){ if ($arr[1][$i]=="Действующее"){ $temp = preg_match_all('|id=(.+)\'|isU', $arr[1][$i-1], $ogrn); echo $ogrn[1][0]; } } ну вот... день убил, но CАМ сделал: Эта программа выводит ОГРН 1027700070518 для действующего предприятия! Где же спецы по foreach?!
Тут: https://php.ru/manual/control-structures.foreach.html#82511 @Abyss вам дал правильный ответ. То что вы решили сделать через задницу - это лишь ваша хотелка.
К сожалению у меня нет возможности изучать как работает foreach, а ссылку про DOMDocument::loadHTML я посмотрел, но не нашел ни одного примера использования этой функции, чтобы я мог извлечь нужные данные. Поэтому я и обращаюсь к специалистам на этом сайте (а Вы послали меня на буржуйский. юмор я оценил). Я не спец по PHP и не собираюсь его изучать.
PHP: $regex = "~ <tr> \s* <td> \s* <a \s+ href='\?id=(\d+)'> (.+?) </a> \s* </td> \s* (*SKIP) <td>Действующее</td> ~sx"; preg_match_all($regex, $data, $matches, PREG_SET_ORDER); foreach($matches as $match) { echo "<p>{$match[1]} {$match[2]}</p>"; }