Recherche php incrementation

Bonjour,

je voudrais savoir si il est possible de faire quelque chose comme ça:

aller chercher dans un <row>, une donnée dans <col> entre toutes les col présentes
avec une boucle for qui incrémente et qui affiche la donnée qu'on affiche

merci d'avance

6 réponses

  1. Oui j'ai essayé ta solution, c'était plus simple que la solution que j'ai mis en place de mon côté qui ne marchait pas
    Le code fonctionne je récupère bien les COL de chaque ROW.

    Je souhaite récupérer toutes les DATA de chaque COL (voir mon fichier XML)
    C'est mon dernier soucis, après j'aurais résolu le problème ...
    Car mon fichier (je l'ai pas mis ici car assez lourd), il contient 42 COL ...

    J'affiche bien les data avec le :
     echo $ROW->COL[1]->DATA."<br>";


    Sauf que pour afficher toutes les data je fais par exemple :
    foreach ($ROW->COL[0] as $COL) {
    echo $ROW->COL[1]->DATA."<br>";
    echo $ROW->COL[2]->DATA."<br>";
    echo $ROW->COL[3]->DATA."<br>";
    }
    C'est possible de simplifier les echo avec une fonction for ?
    J'ai pensé a faire une incrémentation, mais il faut que je définisse un nombre c'est bien ça ?
    1. Contributeur
      peut-être devrais-tu nous montrer le résultat de la suggestion en #9, et ce que tu voudrais avoir à la place.
      tu montres chaque fois un code qui ne fonctionne pas, sans expliquer le résultat que tu attends.
    2. Contributeur
      @yg_bedans quel contexte fais-tu cela?
  2. Et par exemple, je veux récuperer la DATA 3 dans la row 2
    donc ça doit me donner BCD
    1. Contributeur
      alors peut-être ainsi:
      foreach($xml->RESULTSET as $RESULSET) {
            $ROW = $RESULSET->ROW[3]->COL[3] 
            echo $ROW;
      }    
    2. @yg_beD'accord merci ça a résolu mon une partie de mon problème.

      Autre question si je veux faire une boucle, pour isoler les <row> et avoir a l'intérieur de la boucle la sélection des élements <col > et dans chaque <col> j'aimerais avoir chaque data
      Il faut faire un foreach ou un for ?
    3. Contributeur
      @BiscuBu1254alors peut-être ainsi:
      foreach($xml->RESULTSET as $RESULSET) {
            foreach($RESULSET->ROW as $ROW) {
                  foreach($ROW->COL as $COL) {
                       echo $COL;
                 {
            }
      }
    4. @yg_beMerci pour l'aide ! Petite question est-ce qu'il ya un moyen plus simple que de faire un echo de chaque COL ?
      Si par exemple j'ai 5 COL j'aimerais les afficher chaque fois que ça boucle sur le ROW

      Ma solution est:
      foreach ($xml->RESULTSET as $RESULSET) {
       foreach ($RESULSET->ROW as $ROW) {
        foreach ($ROW->COL[0] as $COL) {
         echo "<br>".$COL . "<br>";
         // A l'intérieur de la boucle on récupère chaque donnée des row
         echo $ROW->COL[1]->DATA;
        echo $ROW->COL[2]->DATA;
        echo $ROW->COL[3]->DATA;
        }
       }
      }


      Cela me retourne ce résultat:

      AAA
      07/10/2020
      ADCND

      ADB
      09/10/2020
      ABC

      BBC
      12/10/2020
      BCD
    5. Contributeur
      @BiscuBu1254une solution plus simple pour obtenir quoi?
      as-tu testé la suggestion en #9?
  3. Ah désolée, alors je rééxplique. J'ai des données dans un fichier xml, il me retourne des résultats (le RESULTSET found=3) . Cela contient différentes lignes (c'est les row).

    J'aimerais faire une requête en PHP pour chercher une seule donnée (dans une col) et d'une certaine ligne (les row) en fonction des résultats trouvés . Donc remplacer le 2eme foreach par un IF ou un FOR

    Par exemple, je souhaite avoir la data de la COL 1 qui est dans la ROW 1 (quand le resultset est found = 3 par exemple).

    Mon code php je l'avais modifié ici car le fichier xml que j'utilise est beaucoup plus lourd :

    Le code php
    <?php
    $xml = simplexml_load_file("extractions.xml");
    foreach($xml->RESULTSET as $RESULSET) {
    foreach($RESULSET->ROW[1]->COL[2] as $ROW)
    echo $ROW;
    }
    ?>


    le code xml (modifié) :
    <RESULTSET FOUND="3">
    <ROW>
    <COL>
    <DATA>AAA</DATA>
    </COL>
    <COL>
    <DATA>07/10/2020</DATA>
    </COL>
    <COL>
    <DATA>ADCND</DATA>
    </COL>
    </ROW>
    <ROW>
    <COL>
    <DATA>ADB</DATA>
    </COL>
    <COL>
    <DATA>09/10/2020</DATA>
    </COL>
    <COL>
    <DATA>ABC</DATA>
    </COL>
    </ROW>
    <ROW>
    <COL>
    <DATA>BBC</DATA>
    </COL>
    <COL>
    <DATA>12/10/2020</DATA>
    </COL>
    <COL>
    <DATA>BCD</DATA>
    </COL>
    </ROW>
    </RESULTSET>


    Il me retourne ce résultat:
    07/10/2020
    1. Contributeur
      tu n'expliques pas ce que tu souhaites réaliser.
      "si le résultat est inférieur au résultat trouvé" est particulièrement difficile à comprendre.
      inutile d'expliquer comment tu penses modifier ton code qui ne fonctionne pas, explique plutôt le résultat attendu, peut-être avec un exemple?
      merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
      peut-être veux-tu faire ceci:
      foreach($xml->RESULTSET as $RESULSET) {
            foreach($RESULSET->ROW[2]->COL[5] as $ROW) {
                 if $ROW = "cequejecherche" {
                       echo $ROW;
                 {
            }
      }
      1. Bonjour,
        je voudrais savoir si c'est possible de récupérer une certaine donnée à chaque fois qu'elle boucle dans une <row>.
        j'utilise du xml dans du php et je fais un appel xml dans le fichier php

        avec le code ce sera plus simple :

        le code xml :
        <RESULTSET FOUND="3">
        <ROW>
        <COL>
        <DATA>AAA</DATA>
        </COL>
        <COL>
        <DATA>07/10/2020</DATA>
        </COL>
        <COL>
        <DATA>ADCND</DATA>
        </COL>
        </ROW>
        <ROW>
        <COL>
        <DATA>ADB</DATA>
        </COL>
        <COL>
        <DATA>09/10/2020</DATA>
        </COL>
        <COL>
        <DATA>ABC</DATA>
        </COL>
        </ROW>
        <ROW>
        <COL>
        <DATA>BBC</DATA>
        </COL>
        <COL>
        <DATA>12/10/2020</DATA>
        </COL>
        <COL>
        <DATA>BCD</DATA>
        </COL>
        </ROW>
        </RESULTSET>

        le code php :
        <?php
        $xml = simplexml_load_file("extractions.xml");
        foreach($xml->RESULTSET as $RESULSET) {
        foreach($RESULSET->ROW[2]->COL[5] as $ROW)
        echo $ROW;
        }

        Est-ce possible de remplacer le deuxieme foreach par du if ou for, si le résultat est inférieur au résultat trouvé donc il passe dans la boucle et affiche la valeur demandé
        1. je cherche a faire une conversion du foreach en for ou en if, je ne sais pas ce qui serait pratique pour ce que je souhaite avoir
      2. Contributeur
        bonjour,
        chercher quoi, dans quoi?
        de quel genre d'objet s'agit-il?
        comment déterminer lequel doit s'afficher?
        dans quel contexte fais-tu cela?