Colorline Skrevet 30. november 2009 Del Skrevet 30. november 2009 Hei! Holder på med en oppgave som går ut på at jeg skal konstruere en makro som går gjennom en medlemsliste og sjekker hvem som har betalt medlemsavgift, og navnene på de personene som ikke har betalt, skal da skrives ut i et nytt regneark. Har litt problemer med iterasjonen, den går bare i en evig løkke. Så jeg lurte litt på om noen kunne forklare hvordan Do While fungerer, litt detaljert men forståelig? Etter at jeg har skrevet Do While etterfulgt av gjentaktsbetingelsen, hva skal jeg da skrive før jeg oppdaterer rekketeller, og før jeg skriver Loop? Håper noen kan hjelpe meg. Lenke til kommentar
Jonas Skrevet 1. desember 2009 Del Skrevet 1. desember 2009 En do while-løkke er ikke hensiktsmessige når du på forhånd vet hvor mange ganger en iterasjon skal foregå. Da for bruker man for-løkker. $members = array ( .. ); for ( $iTell = 0, $iMax = count ( $members ); $iTell < $iMax; $iTell++ ) if ( $members[$iTell]['has_paid'] == false ) $members_that_havnt_paid[] = $members[$iTell]['username'] echo 'Following members have not paid: ' . implode ( ', ', $members_that_havnt_paid ); Hvis du fortsatt har lyst til å lese om do while-løkker, så står det i hvert fall litt om det på wikipedia. http://en.wikipedia.org/wiki/Do_while_loop Lenke til kommentar
Colorline Skrevet 1. desember 2009 Forfatter Del Skrevet 1. desember 2009 Takk for svar Men i og med at jeg skal gå gjennom en lang liste og sjekke hvem som er medlem, vet jeg da hvor mange ganger iterasjonen skal utføres? Skal jeg i prinsippet telle antall medlemmer for å bestemme dette altså? Er det ikke heller mulig å legge inn en stoppverdi helt nederst, slik at iterasjonen foregår helt til den betingelsen er nådd? Lenke til kommentar
Jonas Skrevet 1. desember 2009 Del Skrevet 1. desember 2009 (endret) Men i og med at jeg skal gå gjennom en lang liste og sjekke hvem som er medlem, vet jeg da hvor mange ganger iterasjonen skal utføres? Jupp, antall iterasjoner i et slikt scenario vil være antall medlemmer, og dersom du f.eks. henter ut medlemslister fra MySQL e.l., så vil du finne det antallet ved mysql_num_rows. Ved akkurat SQL-queries så er det mer eller mindre tradisjon å bruke do while-løkker, selv om det egentlig ikke er nødvendig, mest fordi man aldri trenger den inkrementerende variabelen som for-løkker gir. Eksempelvis, så vil følgende to kodesnutter gjøre akkurat det samme. <?php $query = 'SELECT * FROM members'; $result = mysql_query ( $query ); for ( $iTell = 0, $iMax = mysql_num_rows ( $result ); $iTell < $iMax; $iTell++ ) $members[] = mysql_fetch_assoc ( $result ); ?> <?php $query = 'SELECT * FROM members'; $result = mysql_query ( $query ); while ( $row = mysql_fetch_assoc ( $result ) ) $members[] = $row; ?> Dersom du - ved det punktet i koden hvor du ønsker å utføre denne sjekken du beskriver og printe ut medlemmer som ikke har betalt - allerede har hentet ut alle medlemmer og de er tilgjengelig i form av et array eller lignende, så er det mest konvensjonelt å bruke for-løkker, selv om du kan while-løkker også. <?php $members = array ( ... ); for ( $iTell = 0, $iMax = count ( $members ); $iTell < $iMax; $iTell++ ) { // $members[$iTell] refererer til aktuelle medlemmet } ?> <?php $members = array ( ... ); $iTell = 0; while ( $iTell < count ( $members ) ) { // $members[$iTell] refererer til aktuelle medlemmet $iTell++; } ?> Endret 1. desember 2009 av Jonas Lenke til kommentar
Colorline Skrevet 1. desember 2009 Forfatter Del Skrevet 1. desember 2009 Men i og med at jeg skal gå gjennom en lang liste og sjekke hvem som er medlem, vet jeg da hvor mange ganger iterasjonen skal utføres? Jupp, antall iterasjoner i et slikt scenario vil være antall medlemmer, og dersom du f.eks. henter ut medlemslister fra MySQL e.l., så vil du finne det antallet ved mysql_num_rows. Ved akkurat SQL-queries så er det mer eller mindre tradisjon å bruke do while-løkker, selv om det egentlig ikke er nødvendig, mest fordi man aldri trenger den inkrementerende variabelen som for-løkker gir. Eksempelvis, så vil følgende to kodesnutter gjøre akkurat det samme. <?php $query = 'SELECT * FROM members'; $result = mysql_query ( $query ); for ( $iTell = 0, $iMax = mysql_num_rows ( $result ); $iTell < $iMax; $iTell++ ) $members[] = mysql_fetch_assoc ( $result ); ?> <?php $query = 'SELECT * FROM members'; $result = mysql_query ( $query ); while ( $row = mysql_fetch_assoc ( $result ) ) $members[] = $row; ?> Dersom du - ved det punktet i koden hvor du ønsker å utføre denne sjekken du beskriver og printe ut medlemmer som ikke har betalt - allerede har hentet ut alle medlemmer og de er tilgjengelig i form av et array eller lignende, så er det mest konvensjonelt å bruke for-løkker, selv om du kan while-løkker også. <?php $members = array ( ... ); for ( $iTell = 0, $iMax = count ( $members ); $iTell < $iMax; $iTell++ ) { // $members[$iTell] refererer til aktuelle medlemmet } ?> <?php $members = array ( ... ); $iTell = 0; while ( $iTell < count ( $members ) ) { // $members[$iTell] refererer til aktuelle medlemmet $iTell++; } ?> Har ikke hatt om MySQL, så regner med at jeg ikke skal bruke det. Skal jeg da likevel bruke For Next? Har ikke hatt så mmye makroprogrammering, så skjønner ikke alle kodene. Hva menes med "array"? Lenke til kommentar
Jonas Skrevet 1. desember 2009 Del Skrevet 1. desember 2009 For Next minner meg om macroprogrammering i Excel. Det er vel ikke tilfeldigvis det du holder på med..? Lenke til kommentar
Colorline Skrevet 1. desember 2009 Forfatter Del Skrevet 1. desember 2009 For Next minner meg om macroprogrammering i Excel. Det er vel ikke tilfeldigvis det du holder på med..? ¨ Jo, det er nøyaktig det jeg holder på med! Ble veldig usikker på om jeg skal bruke Do While eller For Next! Trodde Do While var mest hensiktsmessig, for jeg kan jo i teorien ikke telle nedover en kjempelang liste hvor mange medlemmer det er, og da vet jeg jo ikke hvor mange ganger iterasjonen skal utføres, med mindre jeg lager en celle som heter "antallmedlemmer", og plugger inn et tall der som jeg har talt meg fram til. Lenke til kommentar
TheRealL Skrevet 2. desember 2009 Del Skrevet 2. desember 2009 Uhm, tror du er litt på feil sted altså. Dette er PHP delen av forumet Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå