foreach loop geeft extra ongewenste resultaten
Werkend aan een verhuur systeem met PHP en Mysql loop ik tegen een raar probleem aan. Als ik een query uitvoer op de database komt deze keurig met een tabel terug met de gevraagde gegevens. Als ik die gegevens vervolgens via een foreach loop echo, dan heb ik ineens meer records. Wellicht dat ik de array verkeerd vul of er iets anders aan de hand is. Ik kan niet vinden wat. Hier is de code die ik gebruik:
Hmm kan geen code/script tags vinden.. doe het maar even met "quote"
Wat zie ik over het hoofd?
Hmm kan geen code/script tags vinden.. doe het maar even met "quote"
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
29
30
31
32
33
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
29
30
31
32
33
<?php
$mysqli = new mysqli('localhost','root', '', 'availabilitycalendar');
$sql = "
SELECT rentaltype.VehiculeType, vehicules.VehiculeNr FROM vehicules, rentaltype WHERE rentaltype.Id = vehicules.VehiculeType ORDER BY vehicules.VehiculeNr ASC";
$result = $mysqli -> query( $sql);
if (!$result) {
printf("Query failed: %s\n", $mysqli->error);
exit;
}
echo '<pre>';
print_r($result);
echo '</pre>';echo "<br><br>";
while ($vehiculeCode = $result -> fetch_array()) {
$new_array[$vehiculeCode['VehiculeType']] = $vehiculeCode;
$new_array[$vehiculeCode['VehiculeNr']] = $vehiculeCode;
// echo( $vehiculeCode['VehiculeType'] . "_" . $vehiculeCode['VehiculeNr'] . '<br>');
}
echo '<pre>';
print_r($new_array);
echo '</pre>';echo "<br><br>";
$mysqli -> close();
echo "<br><br>foreach loop<br><br>\n";
foreach( $new_array as $row){
echo $row[0] . "_" . $row[1] . "<br>";
// echo $row['VehiculeType'] . '_' . $row['VehiculeNr'] . '<br />';
}
?>
$mysqli = new mysqli('localhost','root', '', 'availabilitycalendar');
$sql = "
SELECT rentaltype.VehiculeType, vehicules.VehiculeNr FROM vehicules, rentaltype WHERE rentaltype.Id = vehicules.VehiculeType ORDER BY vehicules.VehiculeNr ASC";
$result = $mysqli -> query( $sql);
if (!$result) {
printf("Query failed: %s\n", $mysqli->error);
exit;
}
echo '<pre>';
print_r($result);
echo '</pre>';echo "<br><br>";
while ($vehiculeCode = $result -> fetch_array()) {
$new_array[$vehiculeCode['VehiculeType']] = $vehiculeCode;
$new_array[$vehiculeCode['VehiculeNr']] = $vehiculeCode;
// echo( $vehiculeCode['VehiculeType'] . "_" . $vehiculeCode['VehiculeNr'] . '<br>');
}
echo '<pre>';
print_r($new_array);
echo '</pre>';echo "<br><br>";
$mysqli -> close();
echo "<br><br>foreach loop<br><br>\n";
foreach( $new_array as $row){
echo $row[0] . "_" . $row[1] . "<br>";
// echo $row['VehiculeType'] . '_' . $row['VehiculeNr'] . '<br />';
}
?>
Wat zie ik over het hoofd?
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
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
Output
eScoot_2104001
eScoot_2104002
eBike_2104003
eScoot_2104004
eScoot_2104005
eBike_2104006
eScoot_2104007
eScoot_2104008
eScoot_2104009
eScoot_2104010
foreach loop
eScoot_2104010
eScoot_2104001
eScoot_2104002
eBike_2104006
eBike_2104003
eScoot_2104004
eScoot_2104005
eBike_2104006
eScoot_2104007
eScoot_2104008
eScoot_2104009
eScoot_2104010
eScoot_2104001
eScoot_2104002
eBike_2104003
eScoot_2104004
eScoot_2104005
eBike_2104006
eScoot_2104007
eScoot_2104008
eScoot_2104009
eScoot_2104010
foreach loop
eScoot_2104010
eScoot_2104001
eScoot_2104002
eBike_2104006
eBike_2104003
eScoot_2104004
eScoot_2104005
eBike_2104006
eScoot_2104007
eScoot_2104008
eScoot_2104009
eScoot_2104010
Edit:
Code-tags toegevoegd. Zie ook de Veelgestelde Vragen.
Gewijzigd op 11/10/2020 18:23:29 door - Ariën -
Er zijn gewoon code-tags hoor. Zie ook de Veelgestelde vragen.
Je maakt nu twee array's en dat is niet de bedoeling. Buiten je foreach kan je een extra element aanmaken.
Je maakt nu twee array's en dat is niet de bedoeling. Buiten je foreach kan je een extra element aanmaken.
Gewijzigd op 11/10/2020 15:42:08 door - Ariën -
Wat @Ariën zegt, je slaat twee keer dezelfde informatie op onder verschillende indexen.
Als je dan toch niet de key van $new_array gebruikt (regel 28) dan zou ik eerder in plaats van regel 17 en 18 zoiets verwachten:
Waarbij op index 0 VehiculeType zit, en op index 1 VehiculeNr.
Wellicht is het ook handiger om met textuele indexen te werken want "VehiculeNr" zegt een stuk meer dan "1".
Het is overigens vehicle in plaats van vehicul, lijkt mij.
Als je dan toch niet de key van $new_array gebruikt (regel 28) dan zou ik eerder in plaats van regel 17 en 18 zoiets verwachten:
Waarbij op index 0 VehiculeType zit, en op index 1 VehiculeNr.
Wellicht is het ook handiger om met textuele indexen te werken want "VehiculeNr" zegt een stuk meer dan "1".
Het is overigens vehicle in plaats van vehicul, lijkt mij.
Gewijzigd op 11/10/2020 16:01:31 door Thomas van den Heuvel
Ah ok, bedankt, ik zal daar eens mee gaan stoeien om niet twee keer hetzelfde op te slaan. Ook de opmerking om buiten de foreach een extra element aan te maken moet ik eens bekijken.
Mbt vehicule en vehicle zit t verschil in dat t ene frans is en de voorgestelde in t engels :) en je hebt helemaal gelijk dat je niet twee talen moet mixen..
Ik had in eerste instantie de indexen tekstueel en heb dat gewijzigd in 0 en 1, maar ik verander het terug is inderdaad veel leesbaarder.
YES!! het werkt zoals ik verwacht. Nogmaals dank.
Mbt vehicule en vehicle zit t verschil in dat t ene frans is en de voorgestelde in t engels :) en je hebt helemaal gelijk dat je niet twee talen moet mixen..
Ik had in eerste instantie de indexen tekstueel en heb dat gewijzigd in 0 en 1, maar ik verander het terug is inderdaad veel leesbaarder.
YES!! het werkt zoals ik verwacht. Nogmaals dank.
Gewijzigd op 11/10/2020 17:52:45 door Robert deBeer
Ik ben juist voorstander van het mixen van twee talen; engels voor alles van PHP en (het liefst :) Nederlands voor alles wat je zelf hebt bedacht: variabelen, classes, etc.
Op die manier heb je letterlijk twee namespaces en loop je minder kans op naamconflicten.
Op die manier heb je letterlijk twee namespaces en loop je minder kans op naamconflicten.
Ik kijk weer een beetje gemengd naar het mixxen van twee talen. Voor een simpel eigen projectje is het leuk, maar het moet wel begrijpbaar blijven voor een ander. Ik heb ooit eens iemand mogen helpen met een script, en die bleek variabelen in Esperanto te hebben. Dat moet je echt flink heen en weer zoeken wat sommige dingen betekenen en wat het doet. Ik heb diegene dan ook geadviseerd om gewoon de Engelse taal te hanteren.
Als je het project op Github zou plaatsen, dan zou ik echt Engels aanhouden.
Evenals voor documentatie en comments.
Als je het project op Github zou plaatsen, dan zou ik echt Engels aanhouden.
Evenals voor documentatie en comments.
Gewijzigd op 12/10/2020 12:47:14 door - Ariën -
vehicul, da's niet zo ridicuul - voor een Belg (even afgaande op de spelling van deBeer)




