Conversion d'un tableau html en array php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 848 fois - Téléchargée 25 fois

Contenu du snippet

Cette fonction doit convertir les tableaux HTML simplistes (sans attributs dans les balises <table>, <td> et </tr>) en array PHP multidimensionnels. Retourne false en cas de tableau HTML erronné (manque d'une balise <tr> ou <td>)

Source / Exemple :


function htmltable_to_array($html)//conversion de tableau HTML en array PHP
{
if (substr_count($html,"<tr>")!=substr_count($html,"</tr>") || substr_count($html,"<td>")!=substr_count($html,"</td>")) return false; //tableau invalide
else
	{
	$html=trim($html);
	$html=trim(substr($html,7,count($html)-9)); //superssion des balises de début et de fin de tableau HTML
	
	$nb_lignes=substr_count($html,"<tr>");
	$copie_html=$html;
	$temp=0;
	
		while($temp<=$nb_lignes-1)
		{
			$fin_ligne=strpos($copie_html,"</tr>")-4;
			$lignes[$temp]=trim(substr($copie_html,4,$fin_ligne));
			$copie_html=substr(trim($copie_html),$fin_ligne+9);
			$temp++;
		}
	//la séparation des lignes est finie on attaque les colonnes
	
	$temp=0;
		while ($temp<=$nb_lignes-1)
		{
			$nb_colonnes=substr_count($lignes[$temp],"<td>");
			$copie_ligne=trim($lignes[$temp]);
			$temp2=0;
			while($temp2<=$nb_colonnes-1)
			{
				$fin_colonne=strpos($copie_ligne,"</td>")-4;
				$debut_colonne=strpos($copie_ligne,"<td>");
				$array[$temp][$temp2]=trim(substr($copie_ligne,$debut_colonne+4,$fin_colonne));
				$copie_ligne=substr(trim($copie_ligne),$fin_colonne+9);
				$temp2++;
			}
		$temp++;
		}
		return $array;
		}
return $array;
}

Conclusion :


Un bug arrive sur certains tableaux où certaines balises <td> subsistent. Je n'en ai pas encore identifié la raison avec certitude mais je pense que le problème vient de strpos(). Je reconnais que l'algorithme est un peu lourdingue, mais c'est un premier jet.
N'hésitez pas à poster des améliorations. Je réfléchis à un support des tableaux plus complexes avec des attributs dans les balises le constituant par exemple.

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
23 juin 2006

Petit post pour signaler que j'ai réécrit le scipt avec des expressions rationnelles. C'est plus beau et moins lourdingue, mais gros défaut, le script génère un tableau avec pleins d'éléments vides, il faut que je trouve un moyen de les arranger.
Messages postés
3
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
23 juin 2006

Exact, les expersiions rationnelles sont beaucoup plus souples pour ce genre de projet, c'est vraiment dommage que je n'ai pas le reflex de m'e, servir à chaque fois. Petite question toute fois, comment puis-je écrire avec une expression, "tous les caractères sauf la balise </tr>"?

D'avance Merci.
Messages postés
331
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
10 février 2009

moi jvois pas mieux que de la récurisvité avec de l'expression régulière ^^
(bin oui, DOM je connais pas lol)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

c'est en effet trop peu générique, un peu "lourdingue" comme tu le dis :-)
Il y aurait d'autres façons de faire. En vrac, comme ça, j'en vois déjà deux :
- expressions régulières
- DOM (bah oui, DOM...un tableau HTML peut très bien être un flux xml valide, après tout. Très facile de le faire croire à PHP. Ensuite, en 2 coups, tu as toutes tes valeurs, quel que soit le tableau.)
Messages postés
3
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
23 juin 2006

L'interet c'est de l'utiliser pour faire des tableaux dans un doc PDF généré avec la librairie R&OS par exemple. Si je comprend bien "un head" dans un tableau correspond à <th></th>? ça ne me paraît pas impossible à intégrer, je vais y réfléchir. Merci de ta suggestion.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.