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

Langage PHP Discussion :

Parser un tableau et récuperer chaque élément d'une colonne en les séparerant par un caractère


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut Parser un tableau et récuperer chaque élément d'une colonne en les séparerant par un caractère
    Bonjour,

    Je souhaite parser une page web pour récupérer le contenu d'un tableau et séparer les éléments récupérer d'une colonne par une virgule.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $domExemple = $xpath->query("//table[@class='tab']/tbody/tr/td");
     
    $i = 0;
    foreach ($domExemple as $exemple) {
    	$result[$i++] = $exemple->nodeValue;
    }
     
    print_r($result);
    J'ai un tableau comme ceci
    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
     
    <table class="tab">
    	<tbody>
    		<tr>
    			<td style="text-align: left;">
    				1<br />
    				2<br />
    			</td>
    			<td style="text-align: left;">
    				11<br />
    				12<br />
    			</td>
    			<td style="text-align: left;">
    				111<br />
    				112<br />
    			</td>
    		</tr>
    	</tbody>
    </table>

    Le résultat que je souhaite avoir est ceci :

    # affichage de results[0]:
    1,2
    # affichage de results[1]:
    11, 12

    Est-ce qu'il y a moyen de faire cela directement ou bien je dois crée un array, faire une boucle et ajouter dans cet array chaque élément de results[0] . "," ?

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 015
    Par défaut
    Et ton résultat ressemble à quoi quand il y a plus d'un enregistrement (tr) dans ton tableau?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    Bonjour,

    Je ne travaille qu'avec des tableaux à une ligne et trois colonnes

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 015
    Par défaut
    Dans ce cas moi je l'écrirai comme ça, mais après c'est surtout une histoire de goût:
    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
    $dom = new DOMDocument;
    $state = libxml_use_internal_errors(true);
    $dom->loadHTML($html);
    libxml_use_internal_errors($state);
    $xp = new DOMXPath($dom);
     
    $tdNodeList = $xp->query('//table[@class="tab"]/tbody/tr/td');
     
    $result = array_fill(0, 3, []);
     
    foreach($tdNodeList as $i => $tdNode) {
        $textNodeList = $xp->query('./text()', $tdNode);
        foreach ($textNodeList as $textNode) {
            $result[$i][] = trim($textNode->nodeValue);
        }
    }
     
    $result = array_map('implode', $result, [',', ',', ',']);
    Mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $result = ['', '', ''];
     
    foreach($tdNodeList as $i => $tdNode) {
        $textNodeList = $xp->query('./text()', $tdNode);
        foreach ($textNodeList as $j => $textNode) {
            $result[$i] .= ($j ? ',' : '') . trim($textNode->nodeValue);
        }
    }
    est tout aussi valable et sûrement plus rapide malgré le test ternaire.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.7] Calculer la somme de chaque élément d'une colonne
    Par jawad-gods dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/05/2017, 13h33
  2. Calcul de la Médiane pour chaque élément d'une table
    Par yuekerobero dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/09/2008, 13h01
  3. FAQ : Comment alterner les couleurs de chaque élément d'une liste déroulante ?
    Par yoghisan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/06/2007, 15h15
  4. Comment récuperer un élément dans une listview lors d'une sélection
    Par hellspawn_ludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/04/2007, 03h37
  5. Réponses: 3
    Dernier message: 15/05/2006, 17h09

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