Простой парсер таблицы в массив из HTML
Задача: необходимо преобразовать страницу HTML, в которой данные размещены в виде стандартной таблицы обрамленной тегами <table></table>, в двумерный массив на PHP (парсер таблицы в массив).
1 2 3 4 5 6 7 8 |
<table> <tr> <td>1</td><td>2</td><td>3</td><td>4</td> </tr> <tr> <td>1</td><td>2</td><td>3</td><td>4</td> </tr> </table> |
Сначала я хотел решить задачу «в лоб», а именно искать теги в тексте, писать функционал по вычленению данных между тегами.. Но потом подумал, что «наверное всё уже придумано до нас», для подобных задач. Ну и собственно оказался прав. Задачу решил без лишних усилий в течении минут 5.
Решение: воспользуюсь PHP функцией DOMDocument для того чтобы преобразовать текст в DOM объект:
1 2 3 |
$contents = '<html lang="ru-RU"><head><meta charset="UTF-8" /></head><table>'.$contents."</table></html>"; $DOM = new DOMDocument; $DOM->loadHTML($contents); |
Так я получаю построенное DOM дерево. Затем получаю все «ветки» по имени tr, и перебираю их, одновременно перебирая «всех листья» (т.е. тэги td):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function tdrows($elements){ $str = []; foreach ($elements as $element) {$str[]= $element->nodeValue;} return $str; } function getdata($contents){ $contents = '<html lang="ru-RU"><head><meta charset="UTF-8" /></head><table>'.$contents."</table></html>"; $DOM = new DOMDocument; $DOM->loadHTML($contents); $items = $DOM->getElementsByTagName('tr'); $mass=[]; foreach ($items as $node) { $mass[]=tdrows($node->childNodes); } return $mass; } $mass=getdata($table); var_dump($mass); |
Данные я передал в двухмерный массив $mass, т.е. задача «парсер таблицы в массив» решена
Ну а тут ссылка на подобную же задачу, но вместо HTML документа — файл формата XML