Chaîne de remplacer et d'exploser si le code HTML est propre et toujours la même chose, dès que vous avez de nouveaux attributs, il va de frein.
Donc, seule solution fiable serait en utilisant des expressions régulières ou XML/HTML parser.
Vérifier http://php.net/manual/en/book.dom.php
Regex ne sont pas fiables lors de l'analyse HTML avec elle, parce que le HTML n'est pas régulière. preg_match_all('/<tr>\s*<td[^>]*>((?:<td.+?<\/td|.)*?)<\/td>/si', $html, $matches); où est le problème? que diriez-vous: ce n'est pas l'analyse? Je comprends d'où vous venez, si les tableaux HTML sont assez réguliers, contrairement au reste du HTML, depuis la question concernant les tables où je suis tout à fait confiant dans ma solution.
Une alternative à l'utilisation d'un natif DOM parser pourrait être à l'aide de YQL. De cette façon, vous n'avez pas à faire l'analyse de vous-même. Le YQL Service Web permet aux applications de requête, de filtre et de combiner des données provenant de sources différentes à travers l'Internet.
Par exemple, pour saisir le tableau HTML avec la classe de l'exemple donné à
J'ai délibéré raccourcir les URL afin de ne pas gâcher la réponse. $yql en fait des liens vers le YQL API, ajoute quelques options et contient la requête:
select*from html
where xpath="//table[@class='example']"and url="http://www.w3schools.com/html/html_tables.asp"
YQL pouvez retour JSON et XML. Je l'ai fait retour JSON et décodé ce alors, ce qui résulte en une structure imbriquée de stdClass des objets et des Tableaux (donc ce n'est pas tous les tableaux). Vous avez pour voir si cela correspond à vos besoins.
Vous avez à travailler sur les détails, sur votre propre, car je ne sais pas si vous voulez gérer les différentes lignes de sous-réseaux ou vous voulez fusionner toutes les lignes dans un grand tableau ou quelque chose d'autre.
explode() ne va pas aider à diviser un tableau HTML structure, il sera? vous devez prendre soin de la balise de fermeture, mais le fractionnement de la table: $rows = explode("<tr>", $tablehtml); pourrait être une possibilité. Mais je suis d'accord avec vous et @amora traversant le dom semble être une meilleure façon.
Utiliser un DOM parser comme SimpleXML de diviser le code HTML dans les nœuds, et de marcher à travers les nœuds pour construire le tableau.
Pour cassé/HTML non valide, SimpleHTMLDOM est plus clémente (mais il n'est pas intégré dans).
Pour cassé/HTML non valide, il est bien Rangé, trop.
OriginalL'auteur Pekka 웃
Chaîne de remplacer et d'exploser si le code HTML est propre et toujours la même chose, dès que vous avez de nouveaux attributs, il va de frein.
Donc, seule solution fiable serait en utilisant des expressions régulières ou XML/HTML parser.
Vérifier http://php.net/manual/en/book.dom.php
preg_match_all('/<tr>\s*<td[^>]*>((?:<td.+?<\/td|.)*?)<\/td>/si', $html, $matches); où est le problème?
que diriez-vous: ce n'est pas l'analyse?
Je comprends d'où vous venez, si les tableaux HTML sont assez réguliers, contrairement au reste du HTML, depuis la question concernant les tables où je suis tout à fait confiant dans ma solution.
OriginalL'auteur Hydrino
Une alternative à l'utilisation d'un natif DOM parser pourrait être à l'aide de YQL. De cette façon, vous n'avez pas à faire l'analyse de vous-même. Le YQL Service Web permet aux applications de requête, de filtre et de combiner des données provenant de sources différentes à travers l'Internet.
Par exemple, pour saisir le tableau HTML avec la classe de l'exemple donné à
vous pouvez faire
J'ai délibéré raccourcir les URL afin de ne pas gâcher la réponse.
$yql
en fait des liens vers le YQL API, ajoute quelques options et contient la requête:YQL pouvez retour JSON et XML. Je l'ai fait retour JSON et décodé ce alors, ce qui résulte en une structure imbriquée de
stdClass
des objets et des Tableaux (donc ce n'est pas tous les tableaux). Vous avez pour voir si cela correspond à vos besoins.Vous essayer interactive YQL console pour voir comment il fonctionne.
OriginalL'auteur Gordon
je ne sais pas si c'est la plus rapide , mais vous pouvez vérifier cette classe (à l'aide de preg_replace)
http://wonshik.com/snippet/Convert-HTML-Table-into-a-PHP-Array
OriginalL'auteur Haim Evgi
Si vous souhaitez convertir le html-description d'un tableau, voici comment j'allais le faire:
</...>
) ( http://php.net/manual/de/function.str-replace.php)<...>
) à l'aide d'une expression régulière ( http://php.net/manual/en/function.split.php)Vous avez à travailler sur les détails, sur votre propre, car je ne sais pas si vous voulez gérer les différentes lignes de sous-réseaux ou vous voulez fusionner toutes les lignes dans un grand tableau ou quelque chose d'autre.
OriginalL'auteur phimuemue
vous pouvez utiliser les exploser-fonction pour activer le tableau de colonnes et de lignes dans les tableaux.
voir: php explode
vous devez prendre soin de la balise de fermeture, mais le fractionnement de la table: $rows = explode("<tr>", $tablehtml); pourrait être une possibilité. Mais je suis d'accord avec vous et @amora traversant le dom semble être une meilleure façon.
OriginalL'auteur rgroli