[PHP] PHP-taalkundig

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • St@m
  • Registratie: December 2001
  • Laatst online: 07:25

St@m

@ Your Service

Topicstarter
Ik ben aan het oefenen met PHP. Ben nu bezig met FOR / WHILE en ik kan mooie kerstboompjes maken van sterretjes enz.
Nu ben ik bezig met het maken van een vierkant van sterretjes. Maar dat lijkt mijn hoofd niet helemaal te begrijpen. Sterker nog, ik kom er gewoon niet uit.
Nouja, ik heb er omheen gebouwd en uiteindelijk kom ik er ook wel weer uiteraard, maar dit lijkt me niet de bedoeling om een vierkant te maken.

code:
1
2
3
for ($aantal = 0; $aantal < 4; $aantal++) {
    print("****\n");
}


Zo print ie netjes een vierkant van 4 sterretjes :+
Iets zegt me dat het netter kan met een while erbij, maar ik zie niet hoe..
Dit zal vast wel een veel te makkelijke vraag zijn voor dit gedeelte van het forum, maar wellicht dat iemand me kan of wil helpen.

Aflopende sterretjes, oplopende sterretjes enz, dat lukt allemaal wel.

vuurwerk - vlees eten - tuinkachel - bbq - alcohol - voetbalwedstrijden - buitenfestivals - houtkachels

Beste antwoord (via .oisyn op 27-09-2017 11:27)


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

St@m schreef op zondag 24 september 2017 @ 14:22:
[...]


Hmm, dat zou kunnen inderdaad. Maar ik probeer de FOR en WHILE te oefenen, dan gaat het me niet zozeer om het gebruik van een willekeurige functie, ik probeer het juist te begrijpen :) Maar dank je wel voor je antwoord! Wordt gewaardeerd.
Die functie doet ook niet meer dan een while loopje dat de input string uitbreidt met één karakter. ;)

Je kan gewoon twee loopjes nesten. In de binnenste loop druk je alleen een sterretje af, in de buitenste onderaan alleen een \n.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Alle reacties


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • St@m
  • Registratie: December 2001
  • Laatst online: 07:25

St@m

@ Your Service

Topicstarter
Hmm, dat zou kunnen inderdaad. Maar ik probeer de FOR en WHILE te oefenen, dan gaat het me niet zozeer om het gebruik van een willekeurige functie, ik probeer het juist te begrijpen :) Maar dank je wel voor je antwoord! Wordt gewaardeerd.

vuurwerk - vlees eten - tuinkachel - bbq - alcohol - voetbalwedstrijden - buitenfestivals - houtkachels


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

St@m schreef op zondag 24 september 2017 @ 14:22:
[...]


Hmm, dat zou kunnen inderdaad. Maar ik probeer de FOR en WHILE te oefenen, dan gaat het me niet zozeer om het gebruik van een willekeurige functie, ik probeer het juist te begrijpen :) Maar dank je wel voor je antwoord! Wordt gewaardeerd.
Die functie doet ook niet meer dan een while loopje dat de input string uitbreidt met één karakter. ;)

Je kan gewoon twee loopjes nesten. In de binnenste loop druk je alleen een sterretje af, in de buitenste onderaan alleen een \n.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • St@m
  • Registratie: December 2001
  • Laatst online: 07:25

St@m

@ Your Service

Topicstarter
NMe schreef op zondag 24 september 2017 @ 14:24:
[...]

Die functie doet ook niet meer dan een while loopje dat de input string uitbreidt met één karakter. ;)

Je kan gewoon twee loopjes nesten. In de binnenste loop druk je alleen een sterretje af, in de buitenste onderaan alleen een \n.
Merci voor het sturen in de goede richting! Ik snap niet dat ik dit niet snapte. Ik ga hier even over nadenken :P
Of misschien moet ik gewoon stoppen voor vandaag

[ Voor 14% gewijzigd door St@m op 24-09-2017 14:41 ]

vuurwerk - vlees eten - tuinkachel - bbq - alcohol - voetbalwedstrijden - buitenfestivals - houtkachels


Acties:
  • +1 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 21:00

heuveltje

KoelkastFilosoof

St@m schreef op zondag 24 september 2017 @ 14:19:


Zo print ie netjes een vierkant van 4 sterretjes :+
Iets zegt me dat het netter kan met een while erbij, maar ik zie niet hoe..
Dit zal vast wel een veel te makkelijke vraag zijn voor dit gedeelte van het forum, maar wellicht dat iemand me kan of wil helpen.

Aflopende sterretjes, oplopende sterretjes enz, dat lukt allemaal wel.
Een while is niet per definitie beter of netter dan een for actie.
Beide hebben een eigen doel, en voor dit soort dingen is een for actie perfect.

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 08-10 18:23
Eens! Maar als je het perse in een while loop wil dan is dat prima mogelijk. Maar eigenlijk wordt het dan toch weer een soort for-loop, maar dan staat er een woordje 'while'

Je kan trouwens er nog een loopje insteken die de sterretjes in de breedte zet. Zo kan je vierkantjes maken met een gegeven waarde

Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 23-09 14:00
xFeverr schreef op zondag 24 september 2017 @ 17:40:
Eens! Maar als je het perse in een while loop wil dan is dat prima mogelijk. Maar eigenlijk wordt het dan toch weer een soort for-loop, maar dan staat er een woordje 'while'
Een for-loop is ook eigenlijk gewoon sugar coating for een while loop, met als voordeel dat de counter een scope heeft binnen de lus (hoewel het in PHP volgens mij ook buiten de for scope te benaderen is), en dat de increment duidelijk staat aangegeven. Bij een "teller" is een for-loop vaak een beter keuze, en als de conditie niet afhangt van een aantal een while-loop; puur door de syntax (dat is natuurlijk niet verplicht, maar wel best practice).

Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 07:38

Compizfox

Bait for wenchmarks

heuveltje schreef op zondag 24 september 2017 @ 14:44:
[...]
Een while is niet per definitie beter of netter dan een for actie.
Beide hebben een eigen doel, en voor dit soort dingen is een for actie perfect.
Merk ook op dat je een for-loop bijna altijd kunt schrijven als een (do-)while-loop en andersom. Het is slechts zo dat in bepaalde gevallen één van de opties veel simpeler en/of voor de hand liggender is dan de rest.

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Wat voorbeelden zodat je wat kan leren begrijpen
PHP:
1
2
3
4
5
6
$rows = 10;
while ($rows--) {
    for ($cells = 0; $cells < 10; ++$cells) {
        echo '*';
    }
}

PHP:
1
2
3
4
5
6
$rows = 10;
do {
    for ($cells = 0; $cells < 10; ++$cells) {
        echo '*';
    }
} while (--$rows);

PHP:
1
2
3
4
5
6
$rows = 0;
while ($rows++ < 10) {
    for ($cells = 0; $cells < 10; ++$cells) {
        echo '*';
    }
}

PHP:
1
2
3
4
5
6
$rows = 0;
while (++$rows <= 10) {
    for ($cells = 0; $cells < 10; ++$cells) {
        echo '*';
    }
}

PHP:
1
2
3
4
5
6
$rows = 0;
do {
    for ($cells = 0; $cells < 10; ++$cells) {
        echo '*';
    }
} while (++$rows <= 10)

Het zit hem in de efficiency

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

...en geen van allen zijn dat goeie voorbeelden omdat je die 10 als magic value herhaalt, nog naast het feit dat een dubbele for hier handiger is. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • St@m
  • Registratie: December 2001
  • Laatst online: 07:25

St@m

@ Your Service

Topicstarter
Dank allen. Ik heb het vanmiddag als volgt opgelost:

code:
1
2
3
4
5
6
7
8
9
10
11
12
$horizontaal = 0;
while ($horizontaal < 4) {
    print ("\n");
    $horizontaal++;

    $verticaal = 0;
    while ($verticaal < 4) {
        print ("*");
        $verticaal++;
    }
}
print ("\n");


Deze kan ik ook prima in "for" schrijven. Ik weet wanneer ik een while of een for zou moeten gebruiken, maar mijn hoofd vind while prettiger.

vuurwerk - vlees eten - tuinkachel - bbq - alcohol - voetbalwedstrijden - buitenfestivals - houtkachels


Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
NMe schreef op zondag 24 september 2017 @ 21:13:
nog naast het feit dat een dubbele for hier handiger is. ;)
Hij had het over FOR / WHILE en ik zag alleen FOR code voorbij komen.
De WHILE is in mijn optiek dan een prima aanvulling.

Verder heb ik een link geplaatst wanneer je ++$aantal gebruikt en wanneer $aantal++.
Zie ook waar hij uiteindelijk mee is gekomen (precies wat ik verwachte), dan zijn mijn WHILE versies toch aardige breinbrekers voor hem, lijkt mij.

P.S. deze is de snelste in PHP (duidelijk leesbaar is anders)
PHP:
1
2
3
4
$rows = 11; // de while is hierdoor maar 10 keer, geen 11. Ook al staat er 11
while (--$rows) {
    // code hier
}

[ Voor 15% gewijzigd door DJMaze op 24-09-2017 23:52 . Reden: P.S. toegevoegd ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +2 Henk 'm!

  • TomsDiner
  • Registratie: November 2014
  • Laatst online: 18-07 23:44
De FOR en de WHILE zijn allebei lussen/loops. Ze doen een x aantal keer de code tussen { }.\

Voor mijzelf geldt eigenlijk dat als het op het moment dat de lus gestart gaat worden duidelijk is hoevaak deze moet lopen, ik voor de FOR kies. Bij de FOR gebruik je een "tel-variabele", die vaak alleen binnen de loop te gebruiken is (de scope). In het geval waarin het vierkant getekend moet worden, is er op het moment van het beginnen met tekenen duidelijk wat de horizontale en verticale afmetingen zijn, denk ik. Voor zowel horizontaal als verticaal zou ik dan een FOR gebruiken. Hoewel het niet verboden is, is het imho een beetje een regel om de "tel-variabele" niet te veranderen binnen de de loop. Als je dus een programma van een ander leest, kun je ervan uit gaan dat de FOR een x aantal keer loopt, zo vaak als je af kunt leiden aan de gegevens op het moment dat de FOR start. Uitzondering: de BREAK. Hiermee kun je uit een loop breken.

De WHILE (en DO) loops zijn in mijn ogen oneindig, tot aan een voorwaarde is voldaan. Deze gebruik je vaak wanneer het aantal loops niet vaststaat. Bijvoorbeeld om bewerkingen op een array met onbekende omvang uit te voeren, of -zoals bij fractals- te kijken hoe vaak een bepaalde berekening uitgevoerd dient te worden voor een bepaalde waarde is bereikt. WHILE en DO zijn nagenoeg gelijk, maar het verschil zit ' em in het moment waarop aan de voorwaarde voldaan moet zijn: aan het begin of aan het eind van de lus.

En ligt het aan mij, of zijn veel van de bovenstaande voorbeelden incompleet? Volgens mij genereren die een horizontale rij met sterren, omdat wel aan het eind van elke horizontale rij een "/n" of een "<br>" gegeven moet worden als enter...

Acties:
  • +1 Henk 'm!

  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 08-10 17:33

Acid_Burn

uhuh

St@m schreef op zondag 24 september 2017 @ 21:17:
Dank allen. Ik heb het vanmiddag als volgt opgelost:

code:
1
2
3
4
5
6
7
8
9
10
11
12
$horizontaal = 0;
while ($horizontaal < 4) {
    print ("\n");
    $horizontaal++;

    $verticaal = 0;
    while ($verticaal < 4) {
        print ("*");
        $verticaal++;
    }
}
print ("\n");


Deze kan ik ook prima in "for" schrijven. Ik weet wanneer ik een while of een for zou moeten gebruiken, maar mijn hoofd vind while prettiger.
Persoonlijk zou ik de kriebels krijgen als ik zo'n constructie in productiecode tegen kom, maar dit is geen productie :) Ik snap dat je bezig bent het allemaal te leren en dit is natuurlijk prima om for en while loops te begrijpen. Maar dit kan veel compacter met een for loop. Persoonlijk vind ik dit ook prettiger lezen.

code:
1
2
3
4
5
6
7
$size = 10;
for ($y = 0; $y < $size; $y++) {
  for ($x = 0; $x < $size; $x++) {
    print ('*');
  }
  print ("\n");
 }


Daarnaast. Gebruik a.u.b. geen Nederlandse namen voor variabelen ;)

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Acid_Burn schreef op woensdag 27 september 2017 @ 08:53:
[...]

Daarnaast. Gebruik a.u.b. geen Nederlandse namen voor variabelen ;)
offtopic:
Ben ik het persoonlijk mee eens maar dat is héél persoonlijk en (helaas) geen absolute waarheid. Laten we die discussie over smaak hier dus maar niet voeren. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1