zufallszahl aus zahlenpool

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

  • zufallszahl aus zahlenpool

    hi !

    nach einigenverunglückten Versuchen die sich nicht lohnen würden hier reinzustellen muss ich doch mal fragen

    ich habe mehrere Zahlen, undjede existiet nur einmal.
    jetzt möchte ich zufallsgesteuert sagen wir 4 zahlenauslesen wobei keine der zahlen 2 mal vorkommen darf !

    ...wie könnte man sowas machen ? ich komm einfach nicht drauf....

  • #2
    Hi,
    Du lässt eine Schleife bis x laufen und lässt Dir eine Zufallszahl erstellen, welche Du dann in ein Array einfügst.
    Bei jedem Schleifendurchlauf überprüfst Du mit in_array(), ob die Zahl schon im Array der x Zufallszahlen enthalten ist. Ist das nicht der Fall wird die Schleife fortgesetzt. Ist das der Fall, so muss eine neue Zahl gezogen werden.

    Das müsstest Du jetzt mal umsetzen.

    Grüße Ben.
    Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

    Kommentar


    • #3
      wobei keine der zahlen 2 mal vorkommen darf !
      Aber das Prinzip ist natürlich nicht so falsch...

      Kommentar


      • #4
        ich denke das ist zu speicherlastig wennich auf gut glück zahlen erzeugen lasse denn angenommen ich hätte nur 5 zahlen dann hat erbeieiner guten zufallsfunktion zigtausend wete die nicht stimmen !
        ich suche eben nach einer funktion der ich ein array zuwerfe und diese dann 4 zufällig gewählte zahlenausspuckt oder so.

        Kommentar


        • #5
          Hier ein kleines Beispiel. Sollte selbsterklärend sein
          PHP-Code:
          <?php

              $anzahlZufallszahlen 
          4;
              
          $zufallszahlen = array();
              
              for(
          $i 0$i $anzahlZufallszahlen$i++) {
                  
          $zahl rand(0,10);
                  
                  if(
          in_array($zahl$zufallszahlen)) {
                      ++
          $anzahlZufallszahlen;
                      continue;
                  }
                  
                  
          $zufallszahlen[] = $zahl;
              }

              echo 
          '<pre>';
              
          var_dump($zufallszahlen);
              echo 
          '</pre>';
             
          ?>
          Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

          Kommentar


          • #6
            BenOmania, auch wenn dein Beispiel richtig ist, würde ich vom logischen Ablauf den Increment verändern und nicht den maximal Wert der for-Schleife.
            PHP-Code:
            //aus:
            ++$anzahlZufallszahlen;
            //wird:
            $i--; 

            Kommentar


            • #7
              ich würd eine von den zwei möchlichteiten verwenden

              PHP-Code:
              srand ((double) microtime() * 10000000);
              $rand array_rand($names4); 
              $rand ist dann ein Array mit 4 Werten die Zufällig gewählt sind,..

              würd aber auch gehen mit:

              PHP-Code:
              srand ((double) microtime() * 10000000);
              $val1 rand(0999999); // zwischen 0 und 999999 wird eine Zahl gewählt
              $val2 rand(0999999);
              $val3 rand(0999999);
              $val4 rand(0999999); 

              Kommentar


              • #8
                greeez, wie schließt du in deinem bsp. duplikate aus?

                Kommentar


                • #9
                  Mal abgesehen von greeez Vorschlag ... bei dem ich zunächstmal davon ausgehe das duplicate von PHP selbst ausgeschlossen werden (nicht verifiziert) ... finde ich folgenden Ansatz schöner (zumal der den Satz "ich habe mehrere Zahlen, undjede existiet nur einmal." meiner Meinung nach besser berücksichtigt:
                  PHP-Code:
                  <?php

                  $anzahlZufallszahlen 
                  4;
                  $zufallszahlen = array();
                  $zahlen = array(102030405060708090100);

                  while ( 
                  TRUE ) {
                      
                  $zahl rand(0count($zahlen) - 1);
                      
                      if ( !isset(
                  $zufallszahlen[$zahl]) ) {
                          
                  $zufallszahlen[$zahl] = $zahlen[$zahl];
                          if ( 
                  count($zufallszahlen) == $anzahlZufallszahlen ) break;
                      }
                      
                  }

                  echo 
                  "<pre>";
                  var_dumpy($zufallszahlen);
                  echo 
                  "</pre>";

                  ?>
                  Um einen Wert <= 0 für $anzahlZufallszahlen auszuschliessen könnte man jetzt auch noch anstatt
                  PHP-Code:
                  while ( TRUE
                  ein
                  PHP-Code:
                  while ( $anzahlZufallszahlen && $anzahlZufallszahlen count($zahlen) ) 
                  verwenden ...
                  Zuletzt geändert von goth; 22.01.2006, 23:36.
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    @reallife:
                    Jou, hast recht. Wäre vom logischen Ansatz besser.
                    Java, PHP, (X)HTML, CSS, XML, Linux, Webserver, ... uvm.

                    Kommentar


                    • #11
                      Original geschrieben von reallife
                      greeez, wie schließt du in deinem bsp. duplikate aus?
                      ok, sorry
                      das hier wär ein ansatz:

                      PHP-Code:
                      <?php
                      $vals 
                      = array();
                      srand ((double) microtime() * 10000000);

                      do{
                            
                      $val rand(01000);
                            if(!
                      in_array($val,$vals)){
                                 
                      $vals[] = $val;
                            }
                      }while(
                      count($vals) <= 4);

                      var_dump($vals);
                      ?>
                      oder mit array_rand: (kann man am besten das realisieren mit vorgegebenen zahlen

                      PHP-Code:
                      <?php
                      $nums 
                      = array(10,20,30,40,50);
                      $vals = array();

                      srand ((double) microtime() * 10000000);

                      do{
                            
                      $val array_rand($nums,1);
                            if(!
                      in_array($val,$vals)){
                                 
                      $vals[] = $val;
                            }
                      }while(
                      count($vals) <= 4);

                      var_dump($vals);
                      ?>
                      Zuletzt geändert von greeez; 24.01.2006, 19:43.

                      Kommentar


                      • #12
                        Warum so kompliziert? Copy/Paste aus der Doku:
                        PHP-Code:
                        <?php
                        $numbers 
                        range(120);
                        srand((float)microtime() * 1000000);
                        shuffle($numbers);
                        foreach (
                        $numbers as $number) {
                           echo 
                        "$number ";
                        }
                        ?>
                        Wenn man nur eine bestimmte Anzahl von Zahlen haben will, muss man doch nur noch die foreach-Schleife ändern.

                        PHP-Code:
                        <?php
                        $numbers 
                        range(120);
                        srand((float)microtime() * 1000000);
                        shuffle($numbers);
                        for (
                        $i 0$i 4$i+)
                           echo 
                        $numbers[$i];
                        }
                        ?>
                        Gruß
                        Uwe

                        Kommentar

                        Lädt...
                        X