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 :: Вытянуть несколько значений из таблицы html и сгруппировать их

 PHP.SU

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


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

> Без описания
Heger
Отправлено: 12 Сентября, 2016 - 14:22:10
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2016  


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




Добрый день, подскажите в решении задачи, уже 2-й день пытаюсь, но всё что-то не получается, как я понимаю проблема решается только регулярными выражениями.
Есть таблицы, их n-ое количество, всё это в одной переменной $filtr_table в виде HTML кода:
CODE (html):
скопировать код в буфер обмена
  1. <table class="filtr_line"><tbody><tr>
  2. <td class="title_view" id="201691293391"><span>Бренд</span></td>
  3. <td class="variantu_filtra"><span id="20169122051">Название 1</span><span id="201691294051">Название 2</span><span id="201691263141">Название 3</span><span id="201691213241">Название 4</span></td></tr></tbody></table>
  4.  
  5. <table class="filtr_line"><tbody><tr>
  6. <td class="title_view" id="20169122411"><span>Размер</span></td>
  7. <td class="variantu_filtra"><span id="201691225871">Маленький</span><span id="201691281051">Средний</span><span id="201691254341">Большой</span><span id="201691295381">Огромный</span></td></tr></tbody></table>
  8.  
  9. <table class="filtr_line"><tbody><tr>
  10. <td class="title_view" id="2016912121"><span>Картридж</span></td>
  11. <td class="variantu_filtra"><span id="201691214981">35 мм.</span><span id="201691226841">40 мм.</span><span id="201691231611">45 мм.</span></td></tr></tbody></table>


В целом задача из выше приведенного кода сделать одну таблицу с select'ами которая будет выглядить вот так:
CODE (html):
скопировать код в буфер обмена
  1. <table>
  2. <tr>
  3. <td id="201691293391">Бренд</td>
  4. <td><select>
  5. <option id="20169122051">Название 1</option>
  6. <option id="201691294051">Название 2</option>
  7. <option id="201691263141">Название 3</option>
  8. <option id="201691213241">Название 4</option>
  9. </select></td>
  10. </tr>
  11. <tr>
  12. <td id="20169122411">Размер</td>
  13. <td><select>
  14. <option id="20169122051">Маленький</option>
  15. <option id="201691281051">Средний</option>
  16. <option id="201691254341">Большой</option>
  17. <option id="201691295381">Огромный</option>
  18. </select></td>
  19. </tr>
  20. <tr>
  21. <td id="2016912121">Картридж</td>
  22. <td><select>
  23. <option id="201691214981">35 мм.</option>
  24. <option id="201691226841">40 мм.</option>
  25. <option id="201691231611">45 мм.</option>
  26. </select></td>
  27. </tr>
  28. </table>


Мне бы хотя бы в начале подсказать как делать, а дальше я разберусь.
Пробовал для начала получить содержимое каждой таблицы в массиве и потом перебирая каждую формировать дальше, но на самом начале не получается. Вот например:
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\<table\>(.*)\<\/table\>/i', $filtr_html, $arr);
  2.    print_r($arr);

выдает пустой массив:
CODE (html):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.         )
  6.  
  7.     [1] => Array
  8.         (
  9.         )
  10.  
  11. )


Помогите хотя бы подобрать правильное выражение для preg_match_all чтобы разбить $filtr_table по отдельным таблицам в массиве
 
 Top
andrewkard
Отправлено: 13 Сентября, 2016 - 11:05:36
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Heger пишет:
.

не учитывает перенос строки. Попробуйте сделать с помощью библиотеки simplehtmldom.
Если все равно хотите регулярным, то наверное как то так:
https://regex101[dot]com/r/lQ8fW1/1
 
 Top
Fart
Отправлено: 13 Сентября, 2016 - 11:26:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


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




неплохо))

или так

$reg = "(<table\D+\d+.+\D+\d+.+)";

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

 
 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