Gå til innhold

Do While iterasjon - litt hjelp?:)


Anbefalte innlegg

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
Videoannonse
Annonse

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

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
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 av Jonas
Lenke til kommentar
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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...