Items loop php
Met php heb ik een array die ik loop, na elk item heb ik een $count++;
Nu wil ik elke 2 items bundelen binnen een div element. Stel ik heb 4 items dan worden dit 2 bundels.
Welke methode zou ik hiervoor kunnen gebruiken?
Gr. Bryan
if ($count%4 != 1) echo "</div>";
Dat lijkt mij niet kloppen. Als $users bijvoorbeeld 14 elementen heeft wordt er een div teveel afgesloten.
Ook is het nogal apart dat je begint te tellen bij 1, in plaats van 0.
Een generieke(re) variant is bijvoorbeeld:
Code (php)
En array_chunk() is natuurlijk nog korter.
Gewijzigd op 26/03/2019 16:32:14 door Thomas van den Heuvel
@thomas zou je er misschien comments bij willen zetten zodat ik php beter leer begrijpen wat er staat.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$items = array('een', 'twee', 'drie', 'vier', 'vijf');
$break = 2;
$open = false;
$i = 0;
foreach ($items as $item) {
//wat gebeurt er bij dit if statement?
if ($i % $break == 0) {
//word bij dit statement gekeken of $open true is?
if ($open) {
echo '</p>';
$open = false;
}
echo '<p>';
$open = true;
}
echo $item;
//hier word de variabel +1
$i++;
}
if ($open) {
echo '</p>';
}
?>
[\code]
$items = array('een', 'twee', 'drie', 'vier', 'vijf');
$break = 2;
$open = false;
$i = 0;
foreach ($items as $item) {
//wat gebeurt er bij dit if statement?
if ($i % $break == 0) {
//word bij dit statement gekeken of $open true is?
if ($open) {
echo '</p>';
$open = false;
}
echo '<p>';
$open = true;
}
echo $item;
//hier word de variabel +1
$i++;
}
if ($open) {
echo '</p>';
}
?>
[\code]
Het % symbool berekend het restant van een deling. Bijvoorbeeld
7 % 3 = 1 (je kan twee keer drie stuks halen uit zeven stuks en dan hou je er één over)
6 % 2 = 0 (je kan drie keer twee stuks halen uit zes stuks en houdt dan niets / nul over)
>> word bij dit statement gekeken of $open true is?
Ja. De volgende zijn gelijkwaardig:
if(true === $open)
if($open === true)
if($open)
Ook kun je false gebruiken:
if(false === $open)
if($open === false)
if(!$open)
>> //hier word de variabel +1
Klopt. Dit is allemaal (bijna) hetzelfde:
$i++
$i = $i + 1;
$i += 1;
++$i;
er zit wel een verschil in $i++ en ++$i. Bekijk de volgende snippets:
De laatste verhoogd $i eerst met één voordat deze hem echo-t. De prioriteit ligt bij ++$i dus hoger dan bij $i++ zou je kunnen zeggen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$someVar = true;
if ($someVar === true) { // expliciete vergelijking niet echt nodig, simpelweg if ($someVar) { ... } volstaat
// ...
}
if ($someVar === false) { // kan handig zijn
// ...
}
// of zelfs
if (false === $someVar) { // om ervoor te zorgen dat je dit nooit met een toekenning ($someVar = false;) verwart
// ...
}
?>
$someVar = true;
if ($someVar === true) { // expliciete vergelijking niet echt nodig, simpelweg if ($someVar) { ... } volstaat
// ...
}
if ($someVar === false) { // kan handig zijn
// ...
}
// of zelfs
if (false === $someVar) { // om ervoor te zorgen dat je dit nooit met een toekenning ($someVar = false;) verwart
// ...
}
?>
Daarnaast kan het ook handig zijn om dit soort Boolse variabelen een naam te geven die een true/false toestand aanduidt. Mogelijk was dus $tagOpen of $tagIsOpen ofzo een betere naam geweest dan $open omdat dat min of meer een ja/nee waarde impliceert.
Gewijzigd op 27/03/2019 01:47:07 door Thomas van den Heuvel
Kun je dan ook controleren op het laaste <ul> element?
Daarmee bedoel ik doe iets met elk laatste <ul> element.
Ja, je kunt controleren of je bij de laatste index bent aangeland door $i (voordat je deze verhoogt) te vergelijken met het aantal items van $items minus 1, omdat je begint te tellen bij 0.
Dit zijn in principe alle operaties op arrays, dus los van deze specifieke vraagstelling zou je je kunnen verdiepen in de werking van arrays (hoe vraag ik (de index van) het laatste element van een array op?). Dit soort vraagstukken kun je ook in Goegel gooien met hierin de prefix "php", daarmee kom je meestal een eind.
Gewijzigd op 27/03/2019 22:57:15 door Thomas van den Heuvel
array_key_first en array_key_last wel heel erg vers van de pers zijn (PHP 7.3), dus die komen nog niet heel erg bovendrijven in Google.
Maar als het zeker te weten een gewone array is met een numerieke, opeenvolgende key, dan is count($items) - 1 net zo handig.
Alhoewel Maar als het zeker te weten een gewone array is met een numerieke, opeenvolgende key, dan is count($items) - 1 net zo handig.
Rob Doemaarwat op 28/03/2019 07:03:33:
Maar als het zeker te weten een gewone array is met een numerieke, opeenvolgende key, dan is count($items) - 1 net zo handig.
Hoeft niet eens opvolgend of numeriek te zijn, daar wordt count() niet door gehinderd.
Thomas van den Heuvel op 28/03/2019 17:32:13:
Hoeft niet eens opvolgend of numeriek te zijn, daar wordt count() niet door gehinderd.
Klopt, maar als ie niet oplopend is kun je de index uit de for-loop niet gebruiken om naar het item in de array te refereren.
Rob Doemaarwat op 28/03/2019 18:05:13:
Klopt, maar als ie niet oplopend is kun je de index uit de for-loop niet gebruiken om naar het item in de array te refereren.
Klopt, en daarom is het eigenlijk (altijd?) beter om een foreach te gebruiken, evetueel met $key => $value als je de key nodig hebt. Soms hebben arrays enkel interessante keys en triviale values, in welk geval je zoiets kunt doen als $key => $dummy ofzo.