Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Random array ohne doppelte Werte? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Random array ohne doppelte Werte?


 
Perpetuum
16-08-2004, 12:57 
 
Hi,

ich lasse jeweils 4 Einträge aus dem array $thumb zufallsmäßig ausgeben:


// Ausgabe
$max = count($thumb) - 1;

for ($h=0;$h < 4;$h++){
$zzahl = rand(0, $max);
echo "<a href=index.php?dat=view_profil&id=".$thumb[$zzahl]."&SID=><img border=1 src=".$url."thumbnails/thumb_".$thumb[$zzahl].".jpeg> ";
}


Das funktioniert soweit. Nur kommt da ab und an doppelte array Werte vor. Dreifache oder gar vierfache sind wohl selten, aber theoretisch auch möglich. Kann man das irgendwie verhindern und gleichzeitig trotzdem 4 Werte ausgeben lassen? Vieleicht gibt es eine Funktion für sowas die automatisch doppelte Werte ausschließt? :confused:

 
MoRtAlAn
16-08-2004, 12:58 
 
kannst dir ne funktion bauen, die das verhindert... fertiges gibt es meines wissens nach nicht ?!

beim wert erzeugen einfach schauen, ob du den schonmal hattest (mußt als mitspeichern)

gruss

 
Perpetuum
16-08-2004, 13:12 
 
Hm ok. Umständlich aber ok :).

Falls das noch jemanden interesiiert:


// Zufall erzeugen
$max = count($thumb) - 1;
$zz = array();

while($k < 4){
$zzahl = rand(0, $max);
if(@!in_array($zzahl, $zz)){
$zz[] = $zzahl;
$k++;
}
}

 
Quickborner
16-08-2004, 13:32 
 
$max = count($thumb) - 1;
$aZufall=range(0, $max);
shuffle($aZufall);
while (list (, $zzahl) = each ($aZufall)) {
echo $zzahl."<br />";
}



(bei PHP < 4.2.0 muss der Zufallsgenerator noch explizit gestartet werden)

Quelle: TFM :)

wie geht in_array() mit nur 1 Parameter?

 
wahsaga
16-08-2004, 13:38 
 
Original geschrieben von Quickborner
wie geht in_array() mit nur 1 Parameter?
vermutlich gar nicht - dafür hat er ja das @ davorgeschrieben *g*

 
Perpetuum
16-08-2004, 13:42 
 
So, habe nochmal was geändert:


// Zufall erzeugen ohne doppelte Werte
$max = count($thumb) - 1;
$zz = array();

while($k < 4){
$zzahl = mt_rand(0, $max);
if(!in_array($zzahl, $zz)){
$zz[] = $zzahl;
$k++;
}
}


Scheint zu funktionieren -> in 100 Zufällen keine doppelten Werte vorhanden :rocks: .

 
fiderallalla
17-08-2004, 09:39 
 
Ist nicht kürzer, aber wär's in diesem Fall so nicht schöner?
WHILE ( count($zz) < 4 ) {
$zzahl = mt_rand(0, $max);
if ( in_array($zzahl,$zz) ) continue;
$zz[] = $zzahl;
}


Hans Kuhlen

 
em-!x
17-08-2004, 10:03 
 
ab php4.0 wäre doch array_unique sinnvoller

 
mrhappiness
17-08-2004, 10:08 
 
weil man da dann die werte doppelt und dreifach reinschreiben kann, sie danach wieder rausschmeißen muss und dann eventuell neue werte reinschreiben muss damit das array die erwünschte zahl an elementen hat?

richtig, tolle idee ;)

man könnte höchstens noch ein array mit allen möglichen werten anlegen, immer eins rausnhemen und das danach aus dem array löschen, aber ob das eleganter und/oder shcneller ist... :confused:


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:53 Uhr.