Avatar billede mkjaer Nybegynder
28. maj 2006 - 18:36 Der er 20 kommentarer

while-løkke

Hejsa,

Jeg har brug for at vide hvorvidt en while-løkke kører for sidste gang. Jeg bruger et opslag i en MySql-database, og udskriver resultatet i en while-løkke. Så længe det ikke er sidste gang løkken kører skal der en ekstra skub kode med - men altså ikke hvis det er sidste gennemkørsel af løkken.

Indtil videre har jeg talt antallet af resultater i sql-forespørgslen og så talt gennemløbene, og på den måde sørget for at sidste gennemløb ikke havde ekstra koden med.

Men er der en nemmere metode?

Hilsen
Martin
Avatar billede nielle Nybegynder
28. maj 2006 - 19:04 #1
Desværre ikke.
Avatar billede jakobdo Ekspert
28. maj 2006 - 20:43 #2
Nu ved jeg ikke hvor meget data du trækker ud, men du kunne bruge:
$myData = array();

$myData[] = $row['dataFraTabellen'];
echo implode("ekstra kode",$myData);

Så kommer ekstra koden kun med i mellemrummene.
Avatar billede hmortensen Nybegynder
29. maj 2006 - 01:26 #3
Eller:
$i = 0;
while (...)
{
  if ($i++ > 0)
  {
    echo "Ekstra kode";
  }

  echo "Ting fra databasen";
}
Avatar billede heymann Nybegynder
29. maj 2006 - 09:12 #4
Her er et forslag:

$db = mysql_query("select * from tabel");
while($info = mysql_fetch_array($db)){

echo $info['navn'];

  }

M.v.h.
Heymann
Avatar billede hmortensen Nybegynder
29. maj 2006 - 10:48 #5
heymann, det hjælper ofte at læse spørgsmålet, før man kaster om sig med ligegyldig kode.
Avatar billede jakobdo Ekspert
29. maj 2006 - 11:02 #6
hmortensen: Jeg tænkte det samme, men sagde ikke noget! :o)
Avatar billede mkjaer Nybegynder
29. maj 2006 - 13:20 #7
hmortensen: dit forslag er mangen til min nuværende løsning.
jakobdo: jeg leger lidt med dit forslag - og vender tilbage.

Jeg har i hvert fald fået konstateret, at der ikke er en funktion i PHP, som kan løse min opgave.
Avatar billede nielle Nybegynder
29. maj 2006 - 13:34 #8
mkjaer> Som sagt findes der ikke nogen indbygget funktion i PHP som klare opgaven (eller i noget andet programmeringssprog mig bekendt).

Løsningen med at bruge implode() kan virke pæn og elegant, men den bruger nok mere resourser (både i CPU og RAM) end den løsning du allerede bruger.
Avatar billede hmortensen Nybegynder
29. maj 2006 - 13:50 #9
Forskellen på mit forslag og din egen løsning, som du beskriver, er at du ikke behøver at tælle alle poster, da det er den første post der ikke regnes med.
Avatar billede mkjaer Nybegynder
29. maj 2006 - 14:03 #10
hmortensen: Det er jo ved sidste gennenløb, at ekstra-koden ikke skal med, så det er derfor nødvendigt at kende samlet antal gennemløb - ikk' :-)
Avatar billede hmortensen Nybegynder
29. maj 2006 - 14:15 #11
Nej, ikke hvis ekstra koden puttes ind før din anden kode, som vist i mit eksempel.
Avatar billede nielle Nybegynder
29. maj 2006 - 14:19 #12
Jeg synes ikke det fremgår helt klart hvor at det er den ekstra kode skal sættes ind i forhold til data'ene fra databasen. Umiddelbart kan jeg se tre muligheder:

Eksempel 1)

Line 1
Ekstra kode

Linje 2
Ekstra kode

Linje 3 (sidste linje)


Eksempel 2)

Ekstra kode
Line 1

Ekstra kode
Linje 2

Linje 3 (sidste linje)



Eksempel 3)

Ekstra kode - 1. del
Line 1
Ekstra kode - 2. del

Ekstra kode - 1. del
Line 2
Ekstra kode - 2. del

Linje 3 (sidste linje)
Avatar billede morhan Novice
29. maj 2006 - 14:23 #13
en anden mulighed:

$row = mysql_fetch_array($res);
while($row){
    // print noget

    $row = mysql_fetch_array($res);
    if($row !== false){
        // print noget, hvis ikke sidste række
    }
}
Avatar billede mkjaer Nybegynder
29. maj 2006 - 15:53 #14
nielle: Eksempel 1
Avatar billede nielle Nybegynder
29. maj 2006 - 16:23 #15
Så er 28/05-2006 20:43:26 den der kommer nærmest, men den kræver som sagt flere ressourcer end den måde du gør det lige nu.
Avatar billede jakobdo Ekspert
29. maj 2006 - 17:22 #16
Men indlægget fra hmortensen: 29/05-2006 01:26:59
Gør jo faktisk det samme.
Om koden laves sådan her:

Linje 1

Ekstra kode
Linje 2

Ekstra kode
Linje 3 (sidste linje)

Eller som ønsket:

Linje 1
Ekstra kode

Linje 2
Ekstra kode

Linje 3 (sidste linje)

Forskellen er vel ens?
Avatar billede nielle Nybegynder
29. maj 2006 - 18:02 #17
Det er fuldstændigt rigtigt, og jeg ved ikke hvorfor jeg ikke selv så det fra starten af. Det er faktisk ret snedigt. :^)
Avatar billede hmortensen Nybegynder
30. maj 2006 - 22:35 #18
Hvor langt kom vi her?
Avatar billede nielle Nybegynder
07. juni 2006 - 09:50 #19
Hvad med noget respons?
Avatar billede mkjaer Nybegynder
07. juni 2006 - 10:07 #20
Beklager ventetiden,

Jeg har fundet morhan's løsning mest velegnet til min opgave. Vil morhan poste et svar, så slipper jeg point.

Hilsen
Martin
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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