Vraag over php: waarde-overdracht
Ik heb mijn H5 een opdracht gegeven om een tomtommetje te maken: de kortste route naar Trutjeshoek (google maar!! Ligt bij Kampen) met feitelijk maar 7 knooppunten. Nu kunnen ze dat heel onwiskundig oplossen door gewoon een paar routes te maken en die bij invoer van file (=snelheid wordt minder) te herberekenen.
Maar een van de jongens kwam met het algoritme van Dijkstra.... Heel interessant... Maar zij snappen er nog minder van dan ik. Hoewel: ik ben bezig het bruikbaar te maken. Nu vond ik al gauw de hele php-code ervoor op het internet (http://en.giswiki.net/wiki/Dijkstra's_algorithm), en dat werkt perfect: het geeft zelfs een hele matrix van mogelijkheden. Maar ik wil er alleen de kortste route uitfilteren: dus geen matrix met alle knooppunten uit een grote array. Ik heb de array iets aangepast, zodat er verschillende routes komen naar een paar punten ((16 en 4) in de array steeds het tweede getal).
De opbouw van het script is eerst de class, dan het script om het uit te voeren.
Nu wilde ik in het script een post maken met het gewenste eindpunt.
In dat script staat (bijna onderaan) het volgende:
echo $dijkstra -> getResults();
Hij geeft dan alle routes.
Maar verander je het in echo $dijkstra -> getResults(16); dan komt er mooi de kortste route naar alleen knooppunt 16. Dat moesten we hebben. Ik heb het uitgeprobeerd met het wijzigen van de afstanden naar 16 en andere knooppunten en het werkt.
Nu dacht ik klaar te zijn, want met een post of get zou ik een variabele kunnen maken, die ik in plaats van die 16 zet: echo $dijkstra -> getResults($knooppunt); en $knooppunt krijgt dan bijvoorbeeld de ingevoerde waarde 16 mee via post.
Mooi niet: met die variabele wordt er niets meer uitgevoerd. De waarde is 16 (dat kun je zien aan een simpele echo), maar blijkbaar is een variabele met een waarde iets anders dan de echte waarde tussen die haakjes. De class kan er blijkbaar niets mee. Kan iemand me uitleggen, hoe ik dat moet aanpakken? Mijn enorme dank!
Reacties
Harry van Breugel
Geplaatst op 28 februari 2011 23:09
Dank je David! Dat is dus inderdaad de oplossing!
Inmiddels heb ik de cijfers van knooppunten vervangen door steden en met een post van begin en eindpunt gaat dat prima! (geen wonder... strings!). Ook de afstand tussen twee knooppunten is met een post te wijzigen (lees: file) waardoor eigenlijk het hele dijkstra algoritme perfect is om de leerlingen zo'n tomtommetje te laten maken. Hij werkt namelijk ook van achter naar voren en terug! (a'dam naar denbosch of denbosch naar adam). Nogmaals bedankt.
Geplaatst op 28 februari 2011 23:06
http://www.davidbezemer.nl/test.html
Geplaatst op 28 februari 2011 23:06
zojuist getest:
$pt=(int)$_POST['pt'];
echo $dijkstra->getResults($pt);
Geplaatst op 28 februari 2011 22:15
welke code gebruik je exact om de post waarde in $knooppunt te plaatsen?
Wat eventueel fout kan gaan is dat er een explicitie conversie naar een integer nodig is, dus dan wordt het zoiets:
$knooppunt = int($_GET["veldnaam"]);
Harry van Breugel
Geplaatst op 28 februari 2011 20:27
Als toevoeging: verander ik de knooppunten in de array in plaatsnamen (bijvoorbeeld array('denhaag','rotterdam',20),
array('adam','denhaag',35),) en ik wijzig vertrekpunt 0 in 'adam', dan werkt de post wel! Bij post vul je in 'rotterdam' en de kortste route van Adam naar Rotterdam wordt getoond. Maakt het voor mij nog onbegrijpelijker..