Hey mannen..
Op deze mooie morgen zit ik met een klein probleem. Ik dacht dat het allemaal heel makkelijk zou zijn, maar blijkbaar niet.

Ik heb een array, deze array kan alle lengtes hebben. En bestaat uit :
<?
array('x','y','z');
?>
Maar kan ook zijn :

<?
array('v','w','x','y','z');
?>

Ik heb nu alle string mogelijkheden nodig die zon array kan produceren in alle volgordes : Bij de eerste array zou dat dus zijn :

x,y,z | x,z,y | y,x,z | y,z,x | z,x,y | z,y,x

Ik heb al aardig wat for loopje sgeprobeerd, maar krijg hem steeds net niet te pakken :(
Enige idee ? Thanks alvast



Joep schreef op 23.06.2009 10:20
Gelukkig zijn de meeste functies al redelijk bekend bij me en het is helaas ook niet voor vergelijken.
Het is voor een game voor kinderen, een rekengame.
Zij moeten eerst het aantal mogelijkheden raden (faculteit), dat is gelukkgi niet zo moeilijk te berekenen, daarna moeten ze alle mogelijkheden opschrijven.
Die check ik daarna dan tegen de oplossing van dit probleem ;)


@Dreampower -> Ja want kinderen gaan zulke grote aantallen gebruiken en dan alle mogelijkheden opschrijven :P
Arme kinderen ;)

Maar voor de sake of php experts, ben ik wel benieuwd geworden naar een suitable oplossing zonder mijn execution time te halen..
Ik drink er nog eentje op...
Jacco schreef op 23.06.2009 10:52


o.O

Jacco het had mijn reactie kunne zijn ik zat ook zo :P!
Blanche wat voor koffie drink jij ?
Uiteraard is deze oplossing niet geschikt voor 10 of meer letters, maar dat lijkt me in deze applicatie ook niet echt gewenst. Mijn oplossing is gebaseerd op net zo lang je array door elkaar shuffelen totdat je alle oplossingen gevonden hebt, en voor kleine aantallen is dat best te doen.

En nee, ik had dit scriptje niet op de plank liggen. Maar dit scriptje is nu ook weer niet echt hogere wetenschap ofzo...

Maar dit scriptje is nu ook weer niet echt hogere wetenschap ofzo...


Voor sommige mensen wel :P
Jacco schreef op 23.06.2009 11:08

Maar dit scriptje is nu ook weer niet echt hogere wetenschap ofzo...


Voor sommige mensen wel :P

Bwah, dat valt toch mee? Het is gewoon faculteit, dat staat op wiki. Dus als je 5 dingen hebt, doe je gewoon 5*4*3*2*1. Heel simpel. Nu weet je op hoeveel verschillende manieren iets kan oordenen.
Ik vraag me alleen af of die while wel klopt, maar zal vast wel kloppen door die if (iig geen dubbele).
Dit is nog maar simpele statistiek :-).
Karl schreef op 23.06.2009 11:14
Ik vraag me alleen af of die while wel klopt, maar zal vast wel kloppen door die if (iig geen dubbele).
Die klopt inderdaad. De while loopt net zolang door totdat het aantal oplossingen in de oplossingen array gelijk is aan het berekende aantal oplossingen. En er worden alleen oplossingen aan de array toegevoegd als ze er nog niet in zitten, dus enkel unieke oplossingen in de array :)

echo "Array combis<hr>";

$erin = array("a", "b", "c");

$eruit = array();
findCombis($erin, $eruit);

function findCombis($erin, &$eruit, $arrHave = array()) {
    $newCombis = array();
    foreach($erin as $index => $item) {
        $startArr[] = $item;
        $restant = $erin;     
        unset($restant[$index]);
        
        if ( count($restant) == 1 ) {
            // Einde bereikt
            $nHave = $arrHave;
            $nHave[] = $item; 
            $nHave[] = array_pop($restant);
            $eruit[] = $nHave;
      } else {
          // Er zijn nog meer combi's
          findCombis($restant, $eruit, array_merge($arrHave,$startArr));
         $startArr = array();
      }
        
        
    }
    
    
}


echo "Result:<BR>";
echo "<PRE>".var_export($eruit,1)."</pRE>";
Netjes,
Alleen ben k niet z'n fan van recursieve functies in PHP, maar alsnog is het heel netjes gedaan.

Overigens krijg je al snel dit soort foutmeldingen door PHP met recursieve functies:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes)

Deze error onstaat al na deze array:
array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')

Reageren