IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[DOM] Conversion table html -> array php


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [DOM] Conversion table html -> array php
    Bonjour a tous et bonne année =D.

    Travaillant actuellement sur un projet consistant a réaliser un interface de calcul matriciels, je me retrouve confronter un petit soucis.

    J'essaye désespérément de convertir ma table html en tableau php afin de pouvoir effectuer les différents calculs de matrices.

    Pour ne pas vous piquez les yeux, je vous met un code html de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <html>
        <body>
            <table name="lol" id="tab1">
                <tr>
                    <td>a</td>
                    <td>b</td>
                    <td>c</td>
                </tr>
                <tr>
                    <td>d</td>
                    <td>e</td>
                    <td>f</td>
                </tr>
     
            </table>
     
            <table id="tab2">
                <tr>
                    <td>1</td>
                    <td>2</td>
                    <td>3</td>
                </tr>
                <tr>
                    <td>4</td>
                    <td>5</td>
                    <td>6</td>
                </tr>
     
            </table>
        </body>
    </html>
    Donc deux tableaux html tout simple.

    J'arrive a récupérer et a convertir la première table du document html grâce a ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
     
    $dom = new DOMDocument();
     
    $html = $dom->loadHTMLFile("htmlTest.html");
     
    $dom->preserveWhiteSpace = false;
     
    $tables = $dom->getElementsByTagName('table');
     
     
    //get all rows from the table
    $rows = $tables->item(0)->getElementsByTagName('tr');
    // get each column by tag name
    $cols = $rows->item(0)->getElementsByTagName('th');
    $row_headers = NULL;
    foreach ($cols as $node) {
        //print $node->nodeValue."\n";
        $row_headers[] = $node->nodeValue;
    }
     
    $table = array();
    //get all rows from the table
    $rows = $tables->item(0)->getElementsByTagName('tr');
    foreach ($rows as $row)
    {
        // get each column by tag name
        $cols = $row->getElementsByTagName('td');
        $row = array();
        $i=0;
        foreach ($cols as $node) {
            # code...
            //print $node->nodeValue."\n";
            if($row_headers==NULL)
                $row[] = $node->nodeValue;
            else
                $row[$row_headers[$i]] = $node->nodeValue;
            $i++;
        }
        $table[] = $row;
    }
     
    print_r($table);
    Ce qui me donne en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Array
    (
        [0] => Array
            (
                [0] => a
                [1] => b
                [2] => c
            )
     
        [1] => Array
            (
                [0] => d
                [1] => e
                [2] => f
            )
     
    )
    Le problème étant que l'algorithme php ne convertit que la première table rencontré sur la page. Et oublie toutes les autres. J'ai essayer d'utiliser différents sélecteur pour appliquer le code sur les tables que je désirais et ainsi juste a répéter ce code avec deux sélecteurs pour les deux tables, mais rien y fait...

    Si certains d'entre vous savais comment résoudre ce problème ou encore avais d'autres idées pour arriver au même résultat, je lui en serais grandement reconnaissant ^^.

    Pour finir je tiens a signaler que j'aurais besoin du coup de deux tableau afin de faciliter les calculs entre eux. Si ça peut également servir (ou déservire ><) le tableau html dans le cas réelle est généré dynamiquement a partir du nombre de lignes et de colonnes saisie par l'utilisateur.

    Voila en espérant recevoir une aide précieuse, merci de m'avoir lu.

    Fred

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as seulement a parcourir tes résultat au lieu d'appeller l'élement 0 comme tu le faisais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    $tables = $dom->getElementsByTagName('table');
     
    foreach ($tables as $table) {
    	//get all rows from the table
    	$rows = $table->getElementsByTagName('tr');
    	// get each column by tag name
    	$cols = $table->getElementsByTagName('th');
    	$row_headers = NULL;
    	foreach ($cols as $node) {
    		//print $node->nodeValue."\n";
    		$row_headers[] = $node->nodeValue;
    	}
     
    	$output = array();
    	//get all rows from the table
    	$rows = $table->getElementsByTagName('tr');
    	foreach ($rows as $row)
    	{
    		// get each column by tag name
    		$cols = $row->getElementsByTagName('td');
    		$row = array();
    		$i=0;
    		foreach ($cols as $node) {
    			# code...
    			//print $node->nodeValue."\n";
    			if($row_headers==NULL)
    				$row[] = $node->nodeValue;
    			else
    				$row[$row_headers[$i]] = $node->nodeValue;
    			$i++;
    		}
    		$output[] = $row;
    	}
    	print_r($output);
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Merci pour cette réponse rapide.

    N'est il pas possible de se retrouver avec deux tableaux contenant leurs table respectif plutôt qu'un tableau qui lui contient les deux table ? Ca simplifierais énormément la suite pour les calculs matriciel sachant que mes algo de calcul prennent tous deux tableau en paramètre.

    Encore merci =D

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    plutôt qu'un tableau qui lui contient les deux table ?
    Ce n'est pas ce que fais ce code.
    Mais paradoxalement si tu veux deux tableaux c'est ce qu'il faudrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    $tables = $dom->getElementsByTagName('table');
    $output = array();
    foreach ($tables as $key=>$table) {
    	//get all rows from the table
    	$rows = $table->getElementsByTagName('tr');
    	// get each column by tag name
    	$cols = $table->getElementsByTagName('th');
    	$row_headers = NULL;
    	foreach ($cols as $node) {
    		//print $node->nodeValue."\n";
    		$row_headers[] = $node->nodeValue;
    	}
     
    //get all rows from the table
    	$rows = $table->getElementsByTagName('tr');
    	foreach ($rows as $row)
    	{
    		// get each column by tag name
    		$cols = $row->getElementsByTagName('td');
    		$row = array();
    		$i=0;
    		foreach ($cols as $node) {
    			# code...
    			//print $node->nodeValue."\n";
    			if($row_headers==NULL)
    				$row[] = $node->nodeValue;
    			else
    				$row[$row_headers[$i]] = $node->nodeValue;
    			$i++;
    		}
    		$output[$key][] = $row;
    	}
    }
    Ton premier tableau c'est $output[0] et le deuxième c'est $output[1]
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [PHP 5.3] Table HTML à convertir en PHP
    Par ETVigan dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2011, 13h54
  2. Conversion de tableau EXCEL vers table HTML en ligne
    Par superccman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/01/2010, 10h55
  3. Conversion formulaire HTML vers PHP
    Par spectre3brad dans le forum Langage
    Réponses: 17
    Dernier message: 07/05/2008, 16h41
  4. [SQL] Conversion Table SQL en tableau HTML
    Par Chipsssit dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/05/2007, 16h11
  5. [XSLT][PHP]conversion balise html
    Par abdoulax dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2006, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo