Recherche php incrementation

Signaler
-
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
-
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

Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708
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?
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é
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
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708
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;
           {
      }
}
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

Et par exemple, je veux récuperer la DATA 3 dans la row 2
donc ça doit me donner BCD
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708
alors peut-être ainsi:
foreach($xml->RESULTSET as $RESULSET) {
      $ROW = $RESULSET->ROW[3]->COL[3] 
      echo $ROW;
}    
>
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020

D'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 ?
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708 > BiscuBu1254
alors peut-être ainsi:
foreach($xml->RESULTSET as $RESULSET) {
      foreach($RESULSET->ROW as $ROW) {
            foreach($ROW->COL as $COL) {
                 echo $COL;
           {
      }
}
>
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020

Merci 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
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708 > BiscuBu1254
une solution plus simple pour obtenir quoi?
as-tu testé la suggestion en #9?

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 ?
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708
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.
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020
708 >
Messages postés
12731
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 octobre 2020

dans quel contexte fais-tu cela?