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"
}
}