Zufallszahl prüfen ob schon vorhanden, sonst nochmal...

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

  • Zufallszahl prüfen ob schon vorhanden, sonst nochmal...

    Hallo hab ein Problem die richtige Schleife zu finden, bzw diese dann einzurichten...

    PHP-Code:
    <?php
    $array 
    = array("214","563","254","856","479","335");

    $i "Anfangswert"// Hier muss irgend ein Anfangswert rein...
    do {
              ...        
    // 3-stellige Zahl per Zufall bestimmen
    } while ($i>Endwert); // Hier irgend ein Endwert...
    ?>
    Ich möchte eine 3-stellige Zahl per zufall bestimmen, aber es soll geprüft werden, ob diese Zahl schon in dem Array vorhanden ist. Wenn ja, dann soll eine neue 3-stellige Zahl per Zufall erstellt werden, diese soll wieder geprüft werden, solange bis die Zahl nicht im Array vorhanden ist. In dem Fall soll dann die Zahl dem Array hinzugefügt werden.

    Ich hab ein bischen gesucht auf php.net und bin bei der do..while schleife stehen geblieben, denke das die in Frage kommen könnte, aber wie setze ich dann den Startwert bzw den Endwert fest?
    Ich hab keine Ahnung wie ich das nu so einrichten kann, das es meine oben gennante aufgabe erledigt.

    Oder gibt es da vielleicht ne viel einfacherer Möglichkeit dafür so nach dem motto:

    PHP-Code:
    $zahl = ... // per zufall ausgesucht
    if($zahl == im Array vorhanden...) {
     
    wieder zurück zu $zahl...
    }
    else {
     
    $zahl dem Array hinzufügen...


  • #2
    in_array könnte dir in deiner Zusatzbedingung helfen

    Kommentar


    • #3
      Erzeuge dir ein Array mit allen dreistelligen zahlen, die du kennst.
      Nutze range dazu.

      Würfle das Array wild durcheinander.
      Nutze shuffle dazu

      Lies die ersten x Einträge aus und füge sie in ein neues Array ein.
      Nutze for dazu.
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        @ asp2php

        ja klar... die befehle dafür sind mir klar, war nur zu faul zum posten...

        was mein problem ist, wie wiederhole ich die schleife?

        wenn ich das einfach über if() else() mache, dann muss ich das ja unendlich lange machen, bis irgendwann mal die zahl nicht im array ist...

        ich geh mal davon aus das mein array schon proppenvoll ist und nur noch wenige Zahlen funktionieren (extremfall, natürlich sinnlos...)

        Aber wenn meine Zahl halt schon vorhanden ist, darf sie nicht doppel sein. Und wenn zweimal hintereinander eine zahl per zufall erstellt wird, die schon vorhanden ist und dann noch ein drittes mal usw... kann ja per zufall passieren...

        gibt es vielleicht nen befehlt um sozusamen nach oben wieder zu springen...

        $zahl = zufallszahl
        if(zahl vorhanden) {
        irgend n befehlt den ich nicht kenne damit ich wieder zu $zahl komme

        ...

        Kommentar


        • #5
          Pseudocode:
          Code:
          TUE ETWAS {
            Zufallszahl generieren
            mit in_array prüfen
            Bei Nichtvorhandensein ins Array packen
          } SOLANGE Anzahl_Arrayelemente < Wunschanzahl
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            @ mrhappiness (zu deinem ersten Beitrag)

            ok, dann hab ich ein paar der möglichen zahlen, aber mein problem ist nicht gelöst. was ist, wenn dieser Vorgang wiederholt wird...

            Mein Ziel ist es, die Daten im Array in eine Datenbank zu speichern...
            (die zahl soll einen user identifizieren, zusätzlich zur zahl kommen noch andere infos des users dazu...)
            es soll verhindert werden, das ein user die gleiche zahl bekommt.

            die zahlen nach der reihe zu wählen: 001 002 003 004... usw ist nicht schlau, da evt mal ein user, und somit auch seine nummer gelöscht wird, dann würde einzahl fehlen...

            lieber mit zufallszahlen... nur dafür darf natürlich keine zahl doppelt vorkommen...

            das möchte ich verhindern, indem ich nach einer neu erstellten zahl prüfe ob diese vorhanden ist
            vorhanden = nochmal generiieren und wieder prüfen...
            nicht vorhanden = in datenbank speichern (hier im bsp im array)

            Kommentar


            • #7
              Warum nicht dem Primärschlüssel die Eigenschaft auto_increment verpassen und die Sache der Datenbank überlassen?

              Die Reifen deines Fahrrads hast du ja auch nicht selbst rund gebogen, oder?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                was genau meinst du mit

                SOLANGE Anzahl_Arrayelemente < Wunschanzahl
                Was soll die Wunschanzahl sein?
                Oder muss ich dafür umdenken, ok wenn ich das so machen würde mit dem array wo alle möglichen zahlen drin sind und davon per zufall weclhe aussuche... hmm ich komm aber nicht drauf wie du das meinst



                ich benutze ne txt datei als datenbank und lese zeilenweise ein...

                ist mir für das kleine script hier zu viel aufwand ne sql datenbank zu nehmen...

                Kommentar


                • #9
                  Original geschrieben von israelsson
                  ist mir für das kleine script hier zu viel aufwand ne sql datenbank zu nehmen...
                  Naja, würdest du, müsstest du diesen Aufwand nicht betreiben...

                  Warum hast du was gegen eine nicht lückenlose Nummerierung und was?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    mir fällt grade was ein.

                    könnt ich nicht einfach eine for schleife nehmen
                    die schreife von 0 bis 999 durchlaufen lassen (alle möglichkeiten der zahlenkombination von 3stelligen zahle ist damit eingedeckt)
                    und in dieser schleifen nun einfach die zufallszahl bestimmen und prüfen ob vorhanden, wenn vorhanden soll in der schleifen position 0 auf 1 springen und nochmal die ganze sache dann wieder von 1 auf 2 bis irgendwann 999...

                    das wäre in den fall wenn wirklich jede zahl nicht mehr passt und irgendwann mal eine kommt die noch nicht weg ist...

                    wenn aber vorher die zahl nich vorhanden ist, soll die schleife gestopt werden, das kann man doch mittels
                    return()
                    machen oder?

                    und damit wäre das problem gelöst, die umsetzung schau ich mir mal an...

                    oder hab ich da was übersehen? das das garnicht klappen kann

                    Kommentar


                    • #11
                      Warum hast du was gegen eine nicht lückenlose Nummerierung und was?
                      Hmm, ka eigentlich nicht aber ich möchte das so lösen, jetzt beschäftige ich mich damit schon so lange, mich regt das auf das ich die lösung nicht finde

                      Kommentar


                      • #12
                        Ich hab meine Idee mal ausprobiert...

                        Mein Array hat einfach zu testzwecken die Zahlen 0 bis 500...

                        mir dem Script sieht man wieviele Versuche immer mal so gebraucht werden, bis die Zahl passt...

                        PHP-Code:
                        <?php
                        foreach(range(0500) as $number) { $array[] = $number; }
                        for(
                        $i=0;$i<=999;$i++) {
                         
                        $zahl rand(0,999);
                         if(!
                        in_array("$zahl"$array)) {
                          echo 
                        "ready $zahl";
                          return;
                         }
                         echo 
                        "$i - $zahl<br>";
                        }
                        ?>
                        Noch verbesserungsvorschläge?

                        Kommentar

                        Lädt...
                        X