Random array ohne doppelte Werte?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Random array ohne doppelte Werte?

    Hi,

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

    PHP-Code:
    // 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?
    [SIZE=1]Projekte:
    wartower.de | planetd2.de

  • #2
    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

    Kommentar


    • #3
      Hm ok. Umständlich aber ok .

      Falls das noch jemanden interesiiert:

      PHP-Code:
      // Zufall erzeugen
              
      $max count($thumb) - 1;
              
      $zz = array();
              
              while(
      $k 4){
              
      $zzahl rand(0$max);
              if(@!
      in_array($zzahl$zz)){
              
      $zz[] = $zzahl;
              
      $k++;
              }
              } 
      Zuletzt geändert von Perpetuum; 16.08.2004, 13:37.
      [SIZE=1]Projekte:
      wartower.de | planetd2.de

      Kommentar


      • #4
        range() / shuffle() ?

        PHP-Code:
        $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

        OffTopic:
        wie geht in_array() mit nur 1 Parameter?

        Kommentar


        • #5
          Re: range() / shuffle() ?

          Original geschrieben von Quickborner
          wie geht in_array() mit nur 1 Parameter?
          vermutlich gar nicht - dafür hat er ja das @ davorgeschrieben *g*
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            So, habe nochmal was geändert:

            PHP-Code:
                    // 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 .
            [SIZE=1]Projekte:
            wartower.de | planetd2.de

            Kommentar


            • #7
              Ist nicht kürzer, aber wär's in diesem Fall so nicht schöner?
              PHP-Code:
              WHILE ( count($zz) < ) {
                  
              $zzahl mt_rand(0$max);
                  if ( 
              in_array($zzahl,$zz) ) continue;
                  
              $zz[] = $zzahl;

              Hans Kuhlen

              Kommentar


              • #8
                ab php4.0 wäre doch array_unique sinnvoller

                Kommentar


                • #9
                  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...
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar

                  Lädt...
                  X