Code: Alles auswählen
function whileschleife($array) {
global $$array;
$count = count($$array);
$count = $count-1;
$result = array();
$result2 = array();
$i=0;
while ($i < 20) {
$zufall = mt_rand(0,$count);
if (!in_array($zufall,$result2)) {
$result[] = $$array[$zufall];
$result2[] = $zufall;
$i++;
}
}
return $result;
}
Code: Alles auswählen
$zufall_array= whileschleife('grosses_array');
und so wäre es mit direkten Aufruf über eine Referenz:
Code: Alles auswählen
function whileschleife(&$array) {
$count = count($array);
$count = $count-1;
$result = array();
$result2 = array();
$i=0;
while ($i < 20) {
$zufall = mt_rand(0,$count);
if (!in_array($zufall,$result2)) {
$result[] = $array[$zufall];
$result2[] = $zufall;
$i++;
}
}
return $result;
}
ich vermute mal, dass diese beiden versionen ähnlich schnell sind, da sie ja beide im grunde über eine Referenz arbeiten, wobei der direkte Aufruf über die Referenz wahrscheinlich als eleganter angesehen werden kann.....
Man muss bei diesen ganzen Lösungen über for und whileschleife aber auch noch bedenken, dass es nur funktioniert, wenn ein nummerischer key vorhanden ist, der bei 0 beginnt und fortlaufend ist, d.h. keine Wertepaare (key, value) zwischendurch fehlen..... wenn ein alphanummerischer key verwendet wird wird die Sache ein wenig komplexer.... man könnte dann ggf. mit array_keys() ein Hilfsarray mit allen keys anlegen und dort dann per Zufall die keys auswählen und dann hierfür die Werte im originalarray auslesen:
Code: Alles auswählen
function whileschleife(&$array) {
$hilfsarray=array_keys($array);
$count = count($hilfsarray);
$count = $count-1;
$result = array();
$result2 = array();
$i=0;
while ($i < 20) {
$zufall = mt_rand(0,$count);
if (!in_array($zufall,$result2)) {
$key=$hilfsarray[$zufall];
$result[] = $array[$key];
$result2[] = $zufall;
$i++;
}
}
return $result;
}