<?php
$course_list = array(
1 => array('AMUSE', 'Wortel tartaar', 32, 1),
2 => array('hoofdgerecht', 'Voeg de rest van de ingrediënten toe en laat zo lang als mogelijk tegen de kook aan trekken', 51, -1),
3 => array('VOORGERECHT', 'Krokante gamba\'s met Aziatisch aangemaakte groentesalade en een oosterse sesam vinaigrette', 61, 2),
4 => array('TUSSENGERECHT', 'Gemarineerde zalm, boemboe Bali, wortel en gember', 80, 3),
5 => array('HOOFDGERECHT', 'Kiprouleau met ras el hanout-roomsaus', 109, 4),
6 => array('NAGERECHT', 'bramencake met munt en ijs van zoute amandelen', 126, 5)
);
print_r($course_list);
foreach($course_list as $j => $lcourse)
{
print "$j " . $course_list[6][3] . "\n";
}
?>
Tussen die print_r en de for loop wordt geen extra code meer uitgevoerd.
Maar, ... ik heb nog wat gevonden.
Eerst wordt in arrea $course_list[$j], [0],[1] en [2] opgevuld (dus $course_list[$j][$k] met k 0 , 1 en 2).
Nadien wordt in een foreach loop index 3 opgevuld.
In die foreach groep staat : foreach($course_list as $j => &$lcourse)
dus met een & voor om de waarden te kunnen wijzigen.
Iets waarvan ik nadien afgestapt ben en de wijzingen (aanpassen van $course_list[$j][3]) via $course_list[$j] heb uitgevoerd, dus die '&' was overbodig.
Maar dat is wel de boosdoener. Zonder die & krijg ik wel het goede resultaat.
De print_r toont wel de juiste data, dus ik blijf het vreemd vinden dat die loop (om de data op te vullen) een impact heeft op de data in een andere loop (om de data te tonen).
[size=xsmall]Toevoeging op 14/11/2024 14:40:05:[/size]
Als je in :
<?php
$course_list = array(
1 => array('AMUSE', 'Wortel tartaar', 32, 1),
2 => array('hoofdgerecht', 'Voeg de rest van de ingrediënten toe en laat zo lang als mogelijk tegen de kook aan trekken', 51, -1),
3 => array('VOORGERECHT', 'Krokante gamba\'s met Aziatisch aangemaakte groentesalade en een oosterse sesam vinaigrette', 61, 2),
4 => array('TUSSENGERECHT', 'Gemarineerde zalm, boemboe Bali, wortel en gember', 80, 3),
5 => array('HOOFDGERECHT', 'Kiprouleau met ras el hanout-roomsaus', 109, 4),
6 => array('NAGERECHT', 'bramencake met munt en ijs van zoute amandelen', 126, 5)
);
Ja, ik had het geprobeerd, en hier een uitvoerig antwoord gegeven, maar na een tijd logt phphulp je uit, moet je bij het posten opnieuw inloggen, en ben je je post kwijt.
Het was er nog niet van gekomen het antwoord opnieuw samen te stellen.
Ozzie PHP op 14/11/2024 20:46:50
Je hebt dus niet de complete code gepost. Met & maak je een 'by reference' koppeling.
Klopt, daar bleek niet uit hoe de array was aangepast. Het hele programma posten zou ook niet overzichtelijk geweest zijn, de werking is data-driven en gebaseerd op externe files, ik had enkel gepost wat ik dacht dat relevant was, en dat was dus niet genoeg.
Zet direct na die foreach loop waarin je & gebruikt eens unset($lcourse). Dus als volgt:
<?php
foreach($course_list as $j => &$lcourse) {
...
}
unset($lcourse);
?>
Probeer het dan nog eens.
Voortbouwend op het voorbeeld wat Ward heeft gepost:
<?php
$course_list = array(
1 => array('AMUSE', 'Wortel tartaar', 32, 1),
2 => array('hoofdgerecht', 'Voeg de rest van de ingrediënten toe en laat zo lang als mogelijk tegen de kook aan trekken', 51, -1),
3 => array('VOORGERECHT', 'Krokante gamba\'s met Aziatisch aangemaakte groentesalade en een oosterse sesam vinaigrette', 61, 2),
4 => array('TUSSENGERECHT', 'Gemarineerde zalm, boemboe Bali, wortel en gember', 80, 3),
5 => array('HOOFDGERECHT', 'Kiprouleau met ras el hanout-roomsaus', 109, 4),
6 => array('NAGERECHT', 'bramencake met munt en ijs van zoute amandelen', 126, 5)
);
print_r($course_list);
foreach($course_list as $j => &$lcourse)
{
$i = 1; # doe iets
}
# unset($lcourse);
foreach($course_list as $j => $lcourse)
{
print "$j " . $course_list[6][3] . "\n";
}
?>
geeft fout resultaat met de unset in kommentaar:
1 1
2 -1
3 2
4 3
5 4
6 4
en goed resultaat met de unset uit kommentaar:
1 5
2 5
3 5
4 5
5 5
6 5
Dus die unset lost inderdaad het probleem op. Thanks.
Wat ook het probleem oplost is:
- in de tweede foreach loop ook een call by reference zetten
- in de tweede foreach loop een andere variabele gebruiken.