2010-10-15 17 views
12

Ich habe ein Array von 30 Werten und ich muss aus diesem Array 3 verschiedene zufällige Werte extrahieren. Wie kann ich es tun?Wählen Sie 3 verschiedene Zufallswerte aus einem Array

+0

möglich Duplikat [eine Teilmenge von zufälligen Werten aus einem Array PHP Get] (http://stackoverflow.com/questions/3504401/get-a-subset-of -random-values-from-a-array-php) – kennytm

Antwort

17

Schamlos aus der PHP-Handbuch gestohlen:

<?php 
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); 
$rand_keys = array_rand($input, 2); 
echo $input[$rand_keys[0]] . "\n"; 
echo $input[$rand_keys[1]] . "\n"; 
?> 

http://us2.php.net/array_rand

Beachten Sie, dass, wie von PHP 5.2.10, können Sie mischen wollen (Randomisierung) der Schlüssel, die über shuffle($rand_keys) zurückgegeben werden, sonst sind sie immer in Ordnung (kleinster Index zuerst). Das heißt, im obigen Beispiel könntest du "Neo, Trinity" bekommen, aber niemals "Trinity, Neo".

Wenn die Reihenfolge der zufälligen Elemente nicht wichtig ist, dann ist der obige Code ausreichend.

3

Verwendung shuffle($array) dann array_rand($array,3)

+0

Gibt es einen besonderen Grund, warum du 'shuffle' nennst? –

+2

nur um sicherzustellen, dass es realllllly zufällig ist :) .. die Geschichte dahinter ist die Tatsache, dass im letzten Jahr mit array_rand ich sah nicht so zufällige Ergebnisse (ähnliche Elemente in aufeinanderfolgenden Läufen), so dass es ein bisschen mehr zufällig Ich würde das Array zuerst mischen und dann die array_rand Funktion zuführen und es schien mehr zufällige Werte zu geben. –

+0

Sie müssen immer noch von den Tasten zu den Werten zu bekommen. –

4

Ich bin mir nicht sicher, warum die Verwendung von array_rand() überhaupt zu tun, da es nur ein extra Funktionsaufruf für scheinbar keinen Grund ist. Einfach shuffle() und die ersten drei Elemente in Scheiben schneiden:

shuffle($array); 
print_r(array_slice($array, 0, 3)); 
+0

Viel sauberer, sollte dies eine akzeptierte Antwort sein –

Verwandte Themen