Ik wil graag php leren en daarom heeft een vriend mij een php-opdrachtje gegeven alleen ik kom er echt niet uit....heb er koppijn van!
Misschien dat jullie mij een eindje op weg kunnen helpen!
Ik heb al gegoogeld maar nog niet gevonden dat mij verder hielp
het opdrachtje:
maak een php script die een array met willekeurige getallen op de juiste volgorde zet. Doe dit zo efficiƫnt mogelijk.
Ik begrijp dat dit met een while loopje moet maar daar houdt het mee op.
Belangrijk is dat het bedenken van een oplossing veel grotere leerwaarde heeft dan het uittypen ervan in code.. maar euhm, mijn gedachte gang is als volgt..
- Loop door de array heen op zoek naar de laagste waarde. (bijvoorbeeld door een 'variabele' bij te houden die wijst naar de index van de laagste waarde).
- Na het laatste item in de array te hebben bekeken, plaats je de gevonden laagste waarde op de 1e index van je 'resultaat-array'.
- 'Wis' de waarde uit de array
- Herhaal de procedure tot alle items uit de originele array zijn gewist.
Retourneer de 'resultaat-array'
<?php
function array_sort($array)
{
$result = array();
if(sizeof($array) > 0)
{
// .. dit mag je verder zelf uitwerken :P
}
return $result;
}
?>
" Sorteert op basis van recursie en omwisseling. In een set gegevens van N elementen wordt ergens een spilwaarde gekozen (meestal gewoon de middelste). Dan wordt van de onderkant van de set gezocht naar een waarde die groter is dan de spil, en van de bovenkant naar een waarde die kleiner is dan de spil. Deze worden omgewisseld, en dit wordt herhaald tot de zoekpointers tot aan de spil komen. Dan zijn alle gegevens aan de ene kant kleiner dan de spil, en aan de andere kant groter. Door nu de sort over deze twee deel-sets aan te roepen (recursie), worden deze ook weer voor-gesorteerd, net zolang tot de deelset nog maar uit 1 data-element bestaat, en de hele set gesorteerd is. "
Dat is het idee !!
En dan heb je nog wat leuk puzzelwerk om het te coderen !
De opdracht is niet om te leren hoe de functie sort() werkt of andere handige php functies :)
Wat je moet doen is het array met getallen langslopen. Je vergelijkt het 1e getal met het 2e getal, is de 1e hoger dan wissel je ze om anders doe je niets en ga je door naar het 2e en 3e getal, is het 2e hoger dan het 3e dan wissel je ze om en anders doe je weer niets en ga je door naar het 3e en 4e getal enzovoort.
Nadat je het array 1 keer bent doorgelopen op deze manier staat het hoogste getal altijd achteraan. wat voor rij getallen je ook hebt.
Bijvoorbeeld: 7, 9, 2, 3, 1, 5 is na deze loop: 7, 2, 3, 1, 5, 9. (Ik hoop dat ik dit goed heb uit het hoofd). Dit is eigenlijk de loop die je eerst voor elkaar moet krijgen.
Het tweede deel van de oplossing is het herhalen van deze loop. Alleen elke keer als je de loop uitvoert kijk je een getal minder ver. De eerste keer bekijk je dus alle getallen, de tweede keer weer je zeker dat het laatste getal aan het eind staat en voer je de loop dus uit op de lengte van het array-1. Daarna weet je zeker dat de laatste 2 getallen goed staan, in dit geval 7, 9. Zo ga je door. In dit voorbeeld array wordt deze loop dus 5 keer uitgevoerd.
ik zal niet de opdracht verpesten maar de code wordt dus:
$a = array(7, 9, 2, 3, 1, 5);
$i = count($a)-1; //variabele die in de while loop steeds 1 lager wordt zolang $i groter dan 0 is. Deze waarde kan ook gebruikt worden voor het aantal keren uitvoeren van de for loop binnen 1 loop van de while loop.
while () //de while loop is voor het tweede deel van de oplossing
{
for() //1e deel van de oplossing
{
if ( getal 1 is groter dan getal 2)
{
//omwisselen
}
}
}
print_r($a);
foreach gaat voor het eerste deel van de opdracht wel werken maar niet voor het tweede deel. De term foreach zegt het al. Hij loop alle waardes in het array door. Je wilt dit de eerste keer wel maar de tweede keer wil je alle waardes in het array behalve de laatste doorlopen. Daarna alle waardes behalve de laatste 2...
Maar probeer eerst maar deel 1: 7, 9, 2, 3, 1, 5 wordt: 7, 2, 3, 1, 5, 9