Avatar billede allanhansendk Nybegynder
27. januar 2009 - 12:35 Der er 12 kommentarer og
1 løsning

While loop inde i en foreach

Jeg har nedenstående kode. while-loopen inde i foreach bliver kun kørt en enkelt gang. Hvad jeg gøre for at for afviklet en lignende loop inde i den foreach?

    $i = 2;
    foreach($arrDatasets AS $reklGroup){
        print $reklGroup."/";
        print $i."<br />";
       
        while($row = $read->fetch_row()){
            print $row[0]." - ".$row[$i]."<br />";
        }
       
        $i++;
    }
Avatar billede jakobdo Ekspert
27. januar 2009 - 12:38 #1
Du bør nok forklare hvad det er du vil opnå.
Avatar billede allanhansendk Nybegynder
27. januar 2009 - 12:41 #2
$arrDatasets er et array der indholder felt/kolonne navn fra tabellen, jeg har brug for at for hver nøgle i array'et, skal rækkerne under den tilhørende kolonne skrives.
Avatar billede jakobdo Ekspert
27. januar 2009 - 12:58 #3
Er det ikke et spørgsmål om at lave en korrekt sql så ?
Avatar billede allanhansendk Nybegynder
27. januar 2009 - 13:13 #4
Som data ser ud er det her den bedste løsning. Så leder efter løsning på ovenstående, og ikke en ny fremgangsmåde.
Avatar billede jakobdo Ekspert
27. januar 2009 - 13:21 #5
Men så skal du stadig vise noget data.

Kan du ikke vise lidt dummy data, hvis ikke du kan vise lidt LIVE data.
Avatar billede allanhansendk Nybegynder
27. januar 2009 - 13:26 #6
Der er lidt problematisk.

Jeg skal bare have while-lykken til at køre hver gang foreach-lykken kører. Og så vidt jeg har forstået er det fordi den ikke kan genbruge $row = $read->fetch_row()
Avatar billede j4k0b Nybegynder
27. januar 2009 - 13:29 #7
while($row = $read->fetch_row()){

Udsagnet er sandt så længe værdien af $row ikke bliver: false, tom streng, 0, NULL og lign. Ergo, din while løkke repeteres inde i hver foreach-løkke, hvis $row får en sand værdi vel at mærke.
Avatar billede jakobdo Ekspert
27. januar 2009 - 13:32 #8
Men hvor er det du vil "genbruge" data henne ?
Er det ind i udtrækket fra
while($row = $read->fetch_row()){
eller er det rent faktisk inde i
foreach($arrDatasets AS $reklGroup){
Avatar billede allanhansendk Nybegynder
27. januar 2009 - 13:41 #9
jakobdo: Det må værei while()
Avatar billede allanhansendk Nybegynder
27. januar 2009 - 13:48 #10
j4k0b: while($row = $read->fetch_row()){ skal jo gerne køres på ny hver gang, altså fra toppen, så der skulle jo gerne være data.
Avatar billede tmi Nybegynder
27. januar 2009 - 14:27 #11
$read->fetch_row() fjerner et element fra $read, så når du kører while-løkken tømmer du $read. Dvs. at næste gang while løkken skal køres, så er $read jo stadig tom.
Så du skal nok gøre: (alt efter hvordan din $read klasse fungerer)

  $i = 2;
    foreach($arrDatasets AS $reklGroup){
        print $reklGroup."/";
        print $i."<br />";
       
        $read->execute("SELECT * FROM blabla");
        while($row = $read->fetch_row()){
            print $row[0]." - ".$row[$i]."<br />";
        }
       
        $i++;
    }
Avatar billede j4k0b Nybegynder
27. januar 2009 - 15:38 #12
allanhansendk: Det gør den kun hvis funktionen $read->fetch_row()  ...

1) IKKE sletter de første element, ligesom f.eks. mysql_fetch_array() gør.
2) Holder styr over hvilket index der sidst er returneret
Avatar billede allanhansendk Nybegynder
04. februar 2009 - 14:32 #13
Jeg fandt ikke en decideret løsning, andet end jeg skulle lade være med at gøre dem mere kompliceret en nødvendigt. Derfor blev der lavet et par ekstra arrays der kunne skrives uden for meget hokus pokus.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester