Random array ohne doppelte Werte?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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++;
              }
              } 
      Last edited by Perpetuum; 16-08-2004, 12:37.
      [SIZE=1]Projekte:
      wartower.de | planetd2.de

      Comment


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

        Comment


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

          Comment


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

            Comment


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

              Comment


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

                Comment


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

                  Comment

                  Working...
                  X