Die Elemente in einem Array zufällig anordnen (Thema: PHP Beispiele)

Wie die Werte eines Arrays per Zufall sortiert werden können

Zum zufälligen Anordnen der Elemente in einem Array dient die Funktion shuffle(&$array).
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"
  }
}
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK