[PHP] Simpele For-lus

Moderators: jkien, Xilvo

Berichten: 41

[PHP] Simpele For-lus

Ik probeer voor mijn opleiding een for-lus te schrijven die de cijfers 20 t/m 10 afdrukken elk op een aparte regel, ook in die volgorde.

Om de een of andere reden blijft mijn uitvoer naar de webbrowser blanco.

Dit is mijn code momenteel:

<?php

for ($start_num = 20, $end_num = 10;
$start_num < $end_num;
$start_num = $start_num--)
{
print ("$start_num<BR>");
}
?>

Ik heb al naar de manual op php.net gekeken, maar kan maar niet vinden wat ik nou precies mis.

Bij voorbaat dank! :)

Berichten: 7.068

Re: [PHP] Simpele For-lus

$start_num = 20
$end_num = 10;
Dus:
$start_num < $end_num
20 < 10
false

Berichten: 41

Re: [PHP] Simpele For-lus

Dus toch, ik zat hier zolang over te twijfelen. Bedankt!

Maar hoe zorg ik er dan voor dat er van 20 wordt afgeteld naar 10, toen ik deze check gebruikte in een while-lus & do-while gaf hij namelijk wel de output: 20, 19, 18, ... 10.

Berichten: 41

Re: [PHP] Simpele For-lus

Kan ik heel die check weglaten en bijvoorbeeld de lus laten stoppen d.m.v.

if ($start_num == 9)
break;

Berichten: 41

Re: [PHP] Simpele For-lus

Of:

<?php

for ($start_num = 20, $end_num = 10;
$end_num <= $start_num;
$start_num--)
{
print ("$start_num<BR>");
}
?>

Gebruikersavatar
Berichten: 17.659

Re: [PHP] Simpele For-lus

Je syntax is verkeerd. Zoals je op de manual kunt teruglezen, heb je 3 expressies, gescheiden door ;.
Je start met een beginpunt; dat is expressie 1. Dus: $i = 20.
Expressie 2 is iets wat aan het begin van iedere loop wordt gecontroleerd. Zolang die expressie TRUE is, wordt de loop uitgevoerd. Dus: $i >= 10.
Als laatste heb je nog een expressie die aan het eind van iedere loop uitgevoerd. In dit geval wil je een stapje naar beneden; $i--.

Heb je hiermee voldoende bagage om het verder uit te werken?

Berichten: 41

Re: [PHP] Simpele For-lus

Super, bedankt. Het kan eigenlijk dus beter d.m.v.:

<?php
for ($i = 20;
$i >= 10;
$i--)
{
print ("$i<BR>");
}
?>

Of is dit niet correct?

Gebruikersavatar
Berichten: 17.659

Re: [PHP] Simpele For-lus

Heb je het al uitgeprobeerd? Wat is je output, of krijg je debug messages?

Berichten: 7.068

Re: [PHP] Simpele For-lus

Ger schreef: vr 30 aug 2019, 10:49Je syntax is verkeerd.
Wat is er niet goed dan?

Uit de manual:
Each of the expressions can be empty or contain multiple expressions separated by commas.

Berichten: 8

Re: [PHP] Simpele For-lus

<?php
for ($x = 20; $x >= 10; $x -= 1) {
print($x."<br>");
}
?>

of

<?php

$start_num = 20;
$end_num = 10;
for ($start_num; $start_num >= $end_num; $start_num -= 1) {
print($start_num."<br>");
}
?>

Gebruikersavatar
Berichten: 17.659

Re: [PHP] Simpele For-lus

@Evilbro:
Klopt, het is niet zozeer een syntax error, wat dat betreft compiled het gewoon. Maar dit:

Code: Selecteer alles

for ($start_num = 20, $end_num = 10;
$start_num < $end_num;
$start_num = $start_num--)
Zegt eigenlijk:
1. $start_num = 20, $end_num = 10
2. Indien 20 < 10 (nooit)
3. 20 blijft 20 (maar vanwege 2 kom ik hier niet)

Dat laatste gaat dus fout aangezien je éérst $start_num = $start_num doet (effectief niets dus) en dáárna pas verlaagt met 1. Maar die verlaagde waarde gebruik je vervolgens nooit.

Oftewel: zowel de tweede als derde expressie leveren niet op wat hij voor ogen had; en dat komt doordat hij de syntax verkeerd interpreteert.
Doe maar eens:

Code: Selecteer alles

$i = 20;
$a = $i++;
var_dump($i); // output: 21
var_dump($a); // output: 20
Verder werkt de $i=...; $i>...; $i-- notatie doorgaans het beste voor dergelijke loops. Dat is ook de standaard zoals je die doorgaans in applicaties zult terugvinden voor dergelijke simpele taken. Dus:

Code: Selecteer alles

for ($i=20; $i>=10; $i--) {
    echo $i . '<br>';
}
@Noob; je hebt het dus goed. Zie je ook dat ik de code opmaak met code tags? Daardoor wordt het wat leesbaarder.

Berichten: 7.068

Re: [PHP] Simpele For-lus

Ger schreef: vr 30 aug 2019, 14:48Klopt, het is niet zozeer een syntax error, ...
Misschien moet je dan niet zeggen dat de syntax verkeerd is...

Maar goed, voor de lol:

Code: Selecteer alles

array_map(function($n) {echo ($n . '<br/>');}, range(20, 10, -1));

Gebruikersavatar
Berichten: 17.659

Re: [PHP] Simpele For-lus

EvilBro schreef: vr 30 aug 2019, 15:11
Ger schreef: vr 30 aug 2019, 14:48Klopt, het is niet zozeer een syntax error, ...
Misschien moet je dan niet zeggen dat de syntax verkeerd is...
Mja, je hebt verschillende vormen van verkeerd. ;)

Berichten: 12.262

Re: [PHP] Simpele For-lus

Ik zie wel iets raars:

$start_num = $start_num--;

normaliter volstaat enkel

$start_num--;

om een getal met 1 te verlagen.

Ik weet niet of dit de oorzaak van enig probleem is of niet, maar het is wel ongebruikelijk.

$start_num = $start_num -1;

is wel logisch, en werkt het beste als je stappen ander dan 1 wilt maken, bijvoorbeeld per 10 wilt op/aftellen in iedere keer dat je door de FOR loop gaat.

Berichten: 41

Re: [PHP] Simpele For-lus

@benm; Ik was dus niet zeker of $start_num--; volstond om het getal continu te verlagen tot de lus false zou zijn.

<?php

for ($start_num = 20, $end_num = 10;
$end_num <= $start_num;
$start_num--)
{
print ("$start_num<BR>");
}
?>

of

<?php
for ($i = 20;
$i >= 10;
$i--)
{
print ("$i<BR>");
}
?>

Werkte voor mij dus prima, de precieze syntax van de for-lus was me niet helemaal duidelijk.
@evilbro heeft me er op gewezen dat ik de lus altijd op false zou laten eindigen d.m.v. $start_num <= $end_num. Wat ik compleet over het hoofd gezien heb.

@ger; Bedankt voor de extra duidelijk uitleg over waarom een bepaalde syntax wordt gebruikt, dit was een van de dingen waarover ik onder andere aan het twijfelen was! :)

Reageer