Conversion d'un tableau html en array php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 376 fois - Téléchargée 28 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
Don_Angelo
Messages postés
3
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
23 juin 2006

23 juin 2006 à 18:36
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.
Don_Angelo
Messages postés
3
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
23 juin 2006

18 juin 2006 à 09:52
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.
TheSin
Messages postés
331
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
10 février 2009

17 juin 2006 à 12:39
moi jvois pas mieux que de la récurisvité avec de l'expression régulière ^^
(bin oui, DOM je connais pas lol)
malalam
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
2 mars 2010
25
17 juin 2006 à 11:14
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.)
Don_Angelo
Messages postés
3
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
23 juin 2006

17 juin 2006 à 09:06
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.