существуют ли функции в последних версиях php, специально разработанных для помощи в этой задаче?
Используйте парсер DOM, например SimpleXML, чтобы разбить код HTML на узлы и пройти через узлы, чтобы построить массив.
Для сломанного / недействительного HTML, SimpleHTMLDOM более мягкий (но он не встроен).
String replace and explode будет работать, если HTML-код будет чистым и всегда будет таким же, как только у вас появятся новые атрибуты, он будет тормозить. Таким образом, только надежное решение будет использовать регулярные выражения или парсер XML / HTML. Проверьте http://php.net/manual/en/book.dom.php
Альтернативой использованию собственного DOM-анализатора может быть использование YQL . Таким образом, вам не нужно выполнять собственно анализ. Веб-служба YQL позволяет приложениям запрашивать, фильтровать и комбинировать данные из разных источников через Интернет.
Например, чтобы захватить таблицу HTML с примером класса, приведенным в
http://www.w3schools.com/html/html_tables.asp
ты можешь сделать
$yql = 'http://tinyurl.com/yql-table-grab'; $yql = json_decode(file_get_contents($yql)); print_r( $yql->query->results );
Я решил сократить URL-адрес, чтобы он не испортил ответ. $yql
фактически ссылается на YQL API, добавляет некоторые параметры и содержит запрос:
select * from html where xpath="//table[@class='example']" and url="http://www.w3schools.com/html/html_tables.asp"
YQL может возвращать JSON и XML. Я заставил его вернуть JSON и затем декодировать это, что приводит к вложенной структуре объектов stdClass
и массивов (так что это не все массивы). Вы должны убедиться, что это соответствует вашим потребностям.
Вы проверите интерактивную консоль YQL, чтобы узнать, как она работает .
Я не знаю, если это быстрее, но вы можете проверить этот класс (используя preg_replace)
http://wonshik.com/snippet/Convert-HTML-Table-into-a-PHP-Array
Если вы хотите преобразовать html-описание таблицы, вот как бы я это сделал:
</...>
) ( http://php.net/manual/de/function.str-replace.php ) <...>
), используя регулярное выражение ( http://php.net/manual/en/function.split.php ) Вам нужно самостоятельно разобраться с деталями, так как я не знаю, хотите ли вы обрабатывать разные строки в качестве подмассивов или вы хотите объединить все строки в один большой массив или что-то еще.
вы можете использовать функцию explode, чтобы превратить таблицы cols и rows в массивы.
см .: php explode