Zum zufälligen Anordnen der Elemente in einem Array dient die Funktion shuffle(&$array).
Will man eine eigene Funktion zur zufälligen Anordnung implementieren, dann könnte diese wie folgt aussehen (wobei auf mt_rand() zur Generierung von Zufallszahlen zurückgegriffen wird):
Um ein mehrdimensionales Array zufällig zu sortieren kann eine Funktion implementiert werden, welche rekursiv aufgerufen wird:
PHP-Code
<?php $arr = array('eins', 'zwei', 'drei', 'vier', 'fünf'); shuffle($arr); // das Array zufällig sortieren echo(implode(', ', $arr)); // Werte, getrennt durch Kommata ausgeben ?>
Ausgabe
drei, fünf, eins, vier, zwei
Will man eine eigene Funktion zur zufälligen Anordnung implementieren, dann könnte diese wie folgt aussehen (wobei auf mt_rand() zur Generierung von Zufallszahlen zurückgegriffen wird):
PHP-Code
<?php function my_shuffle($arr) { // array_values anwenden, sodass die Schlüssel numerisch und aufsteigend sind $vals = array_values($arr); $count = count($vals); $out = array(); // die Schleife wird n Mal ausgeführt, wobei n der Anzahl der Elemente im Array entspricht for ($x=0; $x<$count; $x++) { // eine zufällige Position unter den noch verbleibenden Elementen ermitteln $pos = mt_rand(0, $count-1-$x); // das Element an dieser zufälligen Position als nächstes zur Rückgabe hinzufügen $out[] = $arr[$pos]; // aus dem übergebenen Array dieses Element entfernen, sodass es nicht nochmal hinzugefügt werden kann unset($arr[$pos]); // durch unset() kann eine Lücke in den Schlüsseln entstanden sein // array_values() bildet automatisch neue Schlüssel $arr = array_values($arr); } return $out; } $arr = array('eins', 'zwei', 'drei', 'vier', 'fünf'); $arr = my_shuffle($arr); echo(implode(', ', $arr)); ?>
Ausgabe
vier, eins, fünf, drei, zwei
Um ein mehrdimensionales Array zufällig zu sortieren kann eine Funktion implementiert werden, welche rekursiv aufgerufen wird:
PHP-Code
<?php function shuffle_recursive($arr) { shuffle($arr); foreach ($arr as $key=>$val) { if (is_array($val)) { shuffle_recursive($val); } } } $arr = array( array('eins', 'zwei', 'drei'), array('zehn', 'zwölf', 'dreizehn') ); shuffle_recursive($arr); var_dump($arr); ?>
Ausgabe
array(2) { [0]=> array(3) { [0]=> string(8) "dreizehn" [1]=> string(4) "zehn" [2]=> string(5) "zwölf" } [1]=> array(3) { [0]=> string(4) "eins" [1]=> string(4) "drei" [2]=> string(4) "zwei" } }