Zufallswert aus Array darf sich nicht wiederholen.
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beispiel
break
code
datum
doppelt vorkommen
double
einfacher code
ergebnis
header
input
kurzer test
pech
rand
shuffle
url
werte echo
werten code
zufall
zweiten feld
-
Hallo!
Ich habe ein Array mit ein paar Werten:
$input = array( "Beispiel", "Beispiel2", "Beispiel3", );
Dann habe ich zwei Felder, wo zwei zufällige dieser Werte ausgegeben werden.
Jetzt will ich, dass aber nicht im ersten und zweiten Feld das gleich steht. Wie kann ich das machen?
Liebe Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ultimate-bravery schrieb:
Jetzt will ich, dass aber nicht im ersten und zweiten Feld das gleich steht.<?php $data = array( 'Entry 1', 'Entry 2', 'Entry 3', 'Entry 4', 'Entry 5' ); function arrayRand($array, $cnt) { $result = array(); for($i = 0; $i < $cnt; $i++) { $id = 0; $double = true; while($double) { $id = rand(0, count($array) - 1); $double = false; for($j = 0; $j < $i; $j++) { if($result[$j] == $id) { $double = true; break; } } } $result[] = $id; } $data = array(); for($i = 0; $i < $cnt; $i++) $data[] = $array[$result[$i]]; return $data; } header('content-type: text/plain'); $randomArray = arrayRand($data, 2); // für 2 verschiedene zufällige Werte print_r($randomArray);
-
Ich fände sowas sehr viel einfacher:
$input = array('a', 'b', 'c'); $i = rand(0, count($input) - 1); echo $input[$i]; $j = rand(0, count($input) - 2); echo $i > $j ? $input[$j] : $input[$j + 1];
Beitrag zuletzt geändert: 10.5.2012 20:28:34 von euphoria -
ultimate-bravery schrieb:
So:
Wie würde ich das jetzt mit meinem Code machen müssen?$input = array( 'Entry 1', 'Entry 2', 'Entry 3', 'Entry 4', 'Entry 5' ); function arrayRand($array, $cnt) { $keys = array(); foreach($array as $name => $value) $keys[] = $name; $result = array(); for($i = 0; $i < $cnt; $i++) { $id = 0; $double = true; while($double) { $id = $keys[rand(0, count($array) - 1)]; $double = false; for($j = 0; $j < $i; $j++) { if($result[$j] == $id) { $double = true; break; } } } $result[] = $id; } return $result; } $rand_keys = arrayRand($input, 2); // für 2 verschiedene zufällige Werte echo $input[$rand_keys[0]] . "\n";
euphoria schrieb:
Das ist natürlich auch möglich, nur kannst du bei meiner Version auch sehr schnell 3 oder mehr verschiedene Werte anfordern (so wie bei
Ich fände sowas sehr viel einfacher:
, nur dass hier keine doppelt vorkommen können).array_rand()
Falls der TE für immer und fix nur 2 Werte braucht und nie mehr oder weniger kann er deine Variante auch verwenden; meins war als Gegenstück zu
gedacht...array_rand()
-
Anscheinend gibt array_rand sowieso schon nur einzigartige Keys zurück. :P
Das haben wir wohl ganz toll einfach übersehen.
Edit: Ein kurzer Test bestätigt das. Oder ich habe unverschämt viel Glück oder Pech.
Beitrag zuletzt geändert: 10.5.2012 21:24:28 von euphoria -
euphoria schrieb:
Der Test stimmt, das haben hier echt alle übersehen...
Anscheinend gibt array_rand sowieso schon nur einzigartige Keys zurück. :P
Das haben wir wohl ganz toll einfach übersehen.
Edit: Ein kurzer Test bestätigt das. Oder ich habe unverschämt viel Glück oder Pech.
Dafür gibt es die Daten sortiert aus (aufsteigend)...
Um das gewünschte Ergebnis mit genügend Zufälligkeit zu erreichen:
danach ist$rand_keys = array_rand($input, 2); shuffle($rand_keys);
wirklich zufällig und auch nicht mehr sortiert, es kommen auch keine doppelten Einträge vor...$rand_keys
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage