klopt die code die je hier plaatst? Er staat overal [6][3]
Wil je daar niet ergens een $j in hebben?
Ja, dat is het net :-). Het is omdat de waarden niet klopten als $j = 6 dat ik verder ben beginnen kijken.
De statements en output zijn dus wel degelijk uitgevoerd zoals afgebeeld.
Het statement in de foreach loop bevat $j niet, en de print is dus 'statisch', en geeft toch verschillende waarden, alsof er ipv 6 $j zou staan, behalve voor de laatste, die zou 5 moeten zijn ipv 4, zoals in de for loop het geval is.
Tussen de twee loops, werd er niets aan de array gewijzigd, en de volgorde van de statements heeft ook geen belang.
Dat voorafgaand aan dit statement $course_list werd aangepast binnen een foreach($course_list ...) heeft er mee te maken, maar dan nog kan ik dit niet verklaren.
Ik heb nu alle foreach loopen verwijderd en vervangen door klassieke for loopen op index.
Buiten het illustreren van het probleem waar ik tegenaan loop, hebben deze statements geen enkel nut. Je moet er dan verder ook geen logica achter zoeken. Sorry als dat niet duidelijk was.
Twee loop statements waarbij het statement in de loop niet wordt beinvloed door de variabelen in de loop, geven verschillend resultaat. En dat vind ik gek en kan ik niet verklaren.
Twee loop statements waarbij het statement in de loop niet wordt beinvloed door de variabelen in de loop, geven verschillend resultaat. En dat vind ik gek en kan ik niet verklaren.
Een iterator heeft een key (of pointer) die verandert wanneer je de elementen langsloopt.
Daar kun je last van hebben wanneer je niet beseft dat die verplaatsing achter de schermen plaatsvindt of wanneer je zelf bewust de key verplaatst tijdens het itereren.
Het kan ook tot bugs leiden die op het eerste gezicht onverklaarbaar lijken. Staat de key bijvoorbeeld op het laatste element in een array, dan lijk je geen elementen meer te kunnen lezen, ook al weet je dat de array meer data bevat. Dit soort bugs treedt typisch op als je probeert meer dan één operatie uit te voeren met één iterator, bijvoorbeeld in een loop zoals een foreach.
Mijn educated guess is dat het, zoals gezegd, samenhangt met de adressering van elementen in de iterator, want:
Luc Vanderveurst op 11/11/2024 15:12:07
Ik heb nu alle foreach loopen verwijderd en vervangen door klassieke for loopen op index.
Maar zoals Ozzie aangeeft: daar kunnen we slechts naar raden als de topicstarter alleen de vereenvoudigde code post die hij begrijpt en niet de code die operaties uitvoert met de iterator of elementen in de iterator.
Het gedrag van een iterator is niet vreemd als je maar weet hoe een iterator werkt.