1. Einzelner zufälliger Integer-Schlüssel
Ein einzelner Zufallswert kann mit der Funktion mt_rand(min, max) generiert werden, wobei min und max jeweils Integer-Werte sind, die den Bereich eingrenzen aus dem die Zufallszahl stammen darf. Das Zuweisen eines Wertes zu einem Array mit einem zufälligen Schlüssel lässt sich dementsprechend leicht erledigen, indem mt_rand() zur Generierung des Schlüssels verwendet wird. Das nächste Beispiel zeigt das Vorgehen:
<?php $arr = array(); $arr[mt_rand(0, 10000)] = 'beispiel'; var_dump($arr); ?>
array(1) { [4109]=> string(8) "beispiel" }
2. Alle Schlüssel eines Arrays auf zufällige Werte ändern
Das vorherige Verfahren lässt sich weiterführen, um alle Schlüssel eines Arrays zu zufälligen Integer-Werten abzuändern. Im nachfolgenden Beispiel wird dazu die Funktion „randomizeKeys($arr)” definiert. Diese erwartet als einzigen Parameter ein Array dessen Schlüssel in Zufallswerte geändert werden sollen. Dazu iteriert es mit einer foreach-Schleife über alle Elemente des Arrays und schreibt diese parallel in ein neues Rückgabearray. Beim Übertragen wird jeweils ein Zufallswert als Schlüssel über mt_rand() erzeugt. Einzige Schwierigkeit dabei ist es, sicherzustellen, dass der gewählte Zufallsschlüssel noch nicht belegt ist, denn dann würde ein bereits ins Rückgabearray übertragener Wert durch einen anderen überschrieben werden. Um dies zu verhindern, wird einfach so lange der Schlüssel neu generiert, bis er noch nicht im Array belegt ist (sollte in der Regel bereits beim ersten Versuch der Fall sein).
<?php function randomizeKeys($arr) { $out = array(); $max = count($arr) * 10000; foreach ($arr as $val) { do { $newKey = mt_rand(0, $max); } while (isset($out[$newKey])); $out[$newKey] = $val; } return $out; } $arr = array('a', 'b', 'c', 'd'); var_dump(randomizeKeys($arr)); ?>
array(4) { [39230]=> string(1) "a" [18299]=> string(1) "b" [1102]=> string(1) "c" [5599]=> string(1) "d" }
3. Anhand zufälliger Schlüssel sortieren
Die vorherige Funktion zum Zuweisen von zufälligen Integern bietet die Möglichkeit, nach deren Generierung das Array anhand dieser Werte zu sortieren. Dadurch entsteht letztlich eine ebenso zufällige Sortierung aller Werte im Array, so wie sie auch mit der Funktion array_shuffle($arr) erreicht wird. Die Sortierung anhand des Schlüssels ist trivial und erfolgt, indem einmalig ksort(&$arr) auf das Array angewendet wird.
<?php function randomizeKeys($arr) { $out = array(); $max = count($arr) * 10000; foreach ($arr as $val) { do { $newKey = mt_rand(0, $max); } while (isset($out[$newKey])); $out[$newKey] = $val; } return $out; } // Seed fuer Zufallsgenerator setzen, damit das Beispiel immer // gleich ablaeuft mt_srand(11223344); $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $arr = randomizeKeys($arr); ksort($arr); $arr = array_values($arr); var_dump($arr); ?>
array(9) { [0]=> int(9) [1]=> int(8) [2]=> int(2) [3]=> int(5) [4]=> int(6) [5]=> int(1) [6]=> int(3) [7]=> int(7) [8]=> int(4) }