Loops in PHP

Info 
Door: Grubolsch Moeilijkheidsgraad: 1/3
Views:16.810Reacties: 7(Bekijken)
  Log in om zelf te reageren
 Waardering:6.5/10 (4 stemmen)



In mijn eerste PHP-tuturial ga ik het hebben over loopings, omdat zij volgens mij een van de handigste toepassingen in PHP zijn. Bovendien is de beste manier om iets te leren erover les te geven, zo heeft men mij toch vertelt. Men zegt ook dat wie het niet kan, het zal onderwijzen, maar dat verzwijgen we maar eventjes.

Wat zijn Loops?


Loops zijn constructies die kijken of een statement waar is, en als het waar is wordt er iets gedaan. Nadat dat gedaan is word er wat aan een van de waarde voor het statement gekuntseld, zodat na een tijdje het statement FALSE word. De uitvoering word dan gestopt. Simpeler gezegd, een commando wordt herhaald tot het statement FALSE evalueert.

De gevaren van een loop!


Het gevaar bestaat met een verkeerd geprogrammeerde lus, dat je de voorwaarde verkeerd opgeeft, waardoor de lus tot in het oneindige blijft doorgaan. Op een server stoppen deze soort lussen meestal na 30 seconden, maar helaas zijn localhosts niet altijd zo goed geconfigureerd, wat kan leiden tot het tiltslaan van je PC. Pas dus altijd met lussen op!

De While loop


De simpelste loop constructie is de while constructie, een heel simpel (dom) voorbeeldje:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//We beginnen met een waarde voor $cijfer met 1.
$cijfer = 1 ;

//We kijken of de getalwaarde van $cijfer minder of gelijk aan 10 is, als dat TRUE is dan...
while ($cijfer <= 10)
{
    
//Schrijven we de waarde van $getal met een spatie erachter.
    echo $cijfer." " ;
    
//Aan de waarde $cijfer word een extra punt gehecht, vanaf nu is de waarde 2, en begint de hele loop opnieuw, totdat $getal meer is dan 10.
    $cijfer++ ; //korter was meteen echo $cijfer++ .""; geweest, maar voor de duidelijk deze omslachtige code.
}
?>


Dit script zal normaal volgend resultaat geven:
1 2 3 4 5 6 7 8 9 10

Dit lijkt nu wel dom, maar met wat geknutsel kan je er heel handige dingen mee doen.
Als we er nu een array gaan bij betrekken, die we gaan count()'en, kan het al interessant worden.

Kijk nu naar deze voorbeeldcode:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
//array wordt gemaakt
$grubolsch[0] = "cool"; //nummerieke index is in dit geval niet verplicht
$grubolsch[1] = "knap";
$grubolsch[2] = "interessant";
$grubolsch[3] = "slim";

$aantal = count ($grubolsch) ; //aantal elementen van de array word getelt

$teller = 0; //factor die elke keer zullen verhogen

echo "<ul>"; //begin UL neerschrijven
//de array word neergeschreven en elke element wordt tussen een <li> gezet
while ($teller < $aantal) 
{
    
echo "<li>". $grubolsch[$teller++] ."</li>" ;
}
echo "</ul>"; //eind UL neerschrijven
?>


Hiermee ga je de volgende code genereren:

#Code
1
2
3
4
5
6
<ul>
<li>cool</li>
<li>knap</li>
<li>interessant</li>
<li>slim</li>
</ul>


Alles staat dus automatisch tussen <li>, handig, niet?

Als je met een database werkt, kan het zelfs simpelere while constructies gebruiken:
#Code
1
2
3
4
5
6
7
8
9
<?php
$query = "SELECT iets FROM EenColumn";
$result = mysql_query($query) OR mysql_error();

while ($db = mysql_fetch_array($result))
{
    
echo $db["iets"];
}
?>

Wanneer er geen resultaten meer zijn, evalueert de fetch_array functie automatisch FALSE, waardoor de lus wordt gestopt.
Let wel op dat de fetch_array in de lus staat, en geen OR functie() bevat, anders werkt de lus niet meer.

De Foreach loop


Om met arrays te werken is er zelfs nog een handigere loop, namelijk foreach. Deze loop loopt elk element van de array af, en kan eventueel ook de sleutel betrekken in de lus.

Voor elk element te bekijken met deze loop, gebruik je:
#Code
1
2
3
4
5
6
<?php
foreach ($array AS $element)
{
    
//uitvoering met $element    
}
?>


Je kan echter ook de sleutel betrekken in de loop, maar dit hoeft niet:
#Code
1
2
3
4
5
6
<?php
foreach ($array AS $key => $element)
{
    
//uitvoering met $element    
}
?>


Laten we volgende code bekijken, die dient om enkel de dwergen van de volgende groep fantasyhelden te printen.

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
//een associatieve array, met als sleutels het ras van de held
$helden["dwerg"] = "Gimli";
$helden["elf"] = "Galadriel";
$helden["elf"] = "Legolas";
$helden["dwerg"] = "Grubolsch";
$helden["mens"] = "Arthur"
$helden["dwerg"] = "Grablak";

//elk element krijgt de variabele naam: $naam
//elke sleutel krijgt de variabele naam: $RasKey, deze vermelding in de lus is niet verplicht
foreach ($helden as $RasKey => $naam)
{
    
//kijk of de arraysleutel ons vertelt of de persoon een dwerg is  
    if ($RasKey = "dwerg")
    
{
        
//print de naam van de persoon, met de tekst "ownt" en een enter
        echo $naam. " ownt!<br>";
    
}
}
?>


Als resultaat zal je bekomen:
#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Gimli ownt<br>
Grubolsch ownt<br>
Grablak ownt<br>[code]

[kop]De Do While loop[/kop]
Er is ook nog een andere manieren om loops te maken, de Do-While manier:

[code]
<?php
$cijfer = 11; //startwaarde

do 
{
    
echo $cijfer." "; //cijfer neerschrijven met spatie
    $cijfer++; //verhogen van startwaarde
}
while ($cijfer <= 10) //kijken of de lus moet stoppen
?>


Resultaat is: 11

Het verschil ligt men erin dat er word gekeken of de lus moeten worden verder gezet, na het uitvoeren van de code. Er is dus altijd minstens een uitvoering.

De For loop


Dan is er nog een soort loop die we niet mogen vergeten, de FOR loup. Qua stijl is het een zeer handige soort lus, omdat ze erg compact kan worden geschreven. In het begin kan ze echter wat complex lijken.
Een voorbeeldje van een FOR loup:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
<?php
for (//Beginwaarde
    $negatief = 1, $positief = 1;
    
//Kijken of de lus moet stoppen
    $negatief >= -10, $positief <= 10 ;
    
//$negatief na elke lus met 1 aftrekken, $positief met 1 optellen
    $negatief--, $positief++)
//Neerschrijven van de waarde, met het een aanduiding van de waarde.
{
    
echo "MIN: ". $negatief ." PLUS: ". $positief ."<br>";
}
?>


De Syntaxen:


Eventjes de verschillende syntaxen herhalen:

While
#Code
1
2
3
4
5
6
startwaarde
while (voorwaarde)
{
uitvoering
waarderverhoging
}


Do-While
#Code
1
2
3
4
5
6
7
startwaarde
do 
{
uitvoering
waarderverhoging
}
while (voorwaarde)


For
#Code
1
2
3
4
5
6
for (startwaarde;
     voorwaarde;
     waardeverhoging)
{
uitvoering
}


Foreach
#Code
1
2
3
4
foreach (array AS [sleutel =>] element
{
uitvoering
}


Elkeweg, de wind blaast
In alle gevallen kan je waarden en voorwaarden met een comma van elkaar scheiden, om er zo meerdere gebruiken. In het geval van een voorwaarde werkt dit tevens als een OR statement, de lus stopt vanaf EEN van de voorwaarde niet langer klopt.

Vroeger stond deze tutorial reeds op Websitemaken.be, maar deze is nu verbetert. Hij is nu ge-update, de coding is verbeterd en duidelijker gemaakt, en de foreach lus is toegevoegd.
Veel scriptingplezier nog!

7 reacties
joannis11 Geplaatst op 15-03-2010 om 21:31
 

Regular
dan moet je misschien beginnen met de basiscursus php :P
en dan wel alles heel serieus doornemen, herhalen, en oefenen, heb ik ook gedaan, en ik ken nu alles uit mijn hoofd!
h4k3r9 Geplaatst op 20-11-2009 om 14:12
 

Regular
Ik snap er geen ene flikker van.
Nicsan Geplaatst op 20-10-2006 om 22:59
 

Regular
hele goede tutorial :)
tfs
quodlibet Geplaatst op 23-08-2005 om 20:13
 

Nieuwsposter
Dat klopt, al dacht ik zelf eerst ook wel dat het andersom was.
Grubolsch Geplaatst op 22-08-2005 om 00:11
 

Moderator
Ik zal je corrigeren. :wink:
$grubolsch[$i++] voegt 1 toe aan $i NA het gebruik van de variabele, mocht er er $grubolsch[++$i] staan, zou je echter volledig gelijk hebben. Dan wordt de waarde 1 toegekend VOOR het gebruik van de variabele.
De codetagsfout is aangepast. Bedankt voor de melding.

Pagina 1 2 

Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!


Terug naar gewone pagina

Websitemaken wordt gehost door Nucleus.be, uw Hosting Solution Builder