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.
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.