WinFuture-Forum.de: [php] Zufallszahl Erzeugen (mit Ausnahmen) - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] Zufallszahl Erzeugen (mit Ausnahmen)


#1 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 11. September 2005 - 17:02

Hallo zusammen.

Ich habe da eine kurze und einfache Frage zu PHP.
Und zwar möchte ich eine Zufallszahl generieren (z.B. zwischen 1 und 1000), dann benutze ich die Funktion rand(1,1000);
Nun gibt es da aber ein paar Zahlen, die auf keinen Fall ausgewählt werden dürfen.

Beispiel:
Die Zahlen 4, 500 und 888 sind tabu - diese dürfen nicht zufällig ausgewählt werden.
Mit der Funktion rand(1,1000) kann ich dies aber leider nicht festlegen, welche Zahlen er nicht auswählen darf.

Ihr müsst euch das so vorstellen:
Die Zahlen, die tabu sind, müssen über die Datenbank angefordert werden, ich kann die einzelnen zahlen (wie viele und welche es sind) also nicht selber festlegen - sie werden aus der Datenbank gelesen und wenn es z.B. 8 Zahlen zwischen 1 und 1000 sind, dann dürfen diese 8 nicht bei der Zufallsauswahl herauskommen.

Ist das möglich?
Gibt es dafür eine Funktion oder brauche ich dazu eine If-Abfrage mit einem Array?

Bitte helft mir weiter und danke schon mal im Voraus für eure Hilfe ;D
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

Anzeige



#2 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 11. September 2005 - 17:12

Ich würde eine eigene Funktion schreiben, die in etwa so aussieht:

function my_rand($min,$max)
{
   $rand = mt_rand($min,$max);
   // alle verbotenen Zahlen in array speichern
   $verboten = ...
   if(in_array($rand,$verboten))
   {
       return my_rand($min,$max);
   }
   else return $rand;
}

0

#3 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 14. September 2005 - 13:14

Danke @Floele
Ich habe nun deine Funktion benutzt und es so ähnlich gemacht, aber funktioniert wunderbar!
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#4 Mitglied ist offline   Spezi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 24. Februar 04
  • Reputation: 0
  • Wohnort:Wesel

geschrieben 14. September 2005 - 13:32

Hy,

naja im ungünstigsten fall kann trotzdem eine Verbotene Zahl rauskommen.

Es wird am anfang eine Zufallszahl erzeugt und falls die verboten ist, dann wird eine neue Zufallszahl erzeugt, aber diese wird dann nicht mehr überprüft und es kann passieren das eine Verbotene Zahl rauskommt.

So wäre es besser:

function my_rand($min,$max)
{
  $rand = mt_rand($min,$max);
  // alle verbotenen Zahlen in array speichern
  $verboten = ...
  while(in_array($rand,$verboten)) {
    $rand = mt_rand($min,$max);
  }
  return $rand;
}


Naja hoffe das kommt so hin, weil ich PHP schon länger nicht mehr gemacht hab. :lol:
0

#5 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 14. September 2005 - 14:03

Zitat (Spezi: 14.09.2005, 14:32)

naja im ungünstigsten fall kann trotzdem eine Verbotene Zahl rauskommen.

Es wird am anfang eine Zufallszahl erzeugt und falls die verboten ist, dann wird eine neue Zufallszahl erzeugt, aber diese wird dann nicht mehr überprüft


Falsch. Ansonsten: Beweis.
(ich vermute du hast einen entscheidenden Buchstaben falsch gelesen)

Dieser Beitrag wurde von Floele bearbeitet: 14. September 2005 - 14:04

0

#6 Mitglied ist offline   Spezi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 24. Februar 04
  • Reputation: 0
  • Wohnort:Wesel

geschrieben 14. September 2005 - 20:09

Zitat (Floele: 14.09.2005, 15:03)

Falsch. Ansonsten: Beweis.
(ich vermute du hast einen entscheidenden Buchstaben falsch gelesen)
<{POST_SNAPBACK}>


Ich habe mal beide varianten ausprobiert und das ergebnis bei deiner funktion war das sie auch verbotene Zahlen ausgegeben hat.

<?php

$min = 1; 
$max = 10;

function my_rand1($min, $max) {
  
  $rand = mt_rand($min, $max);
  
  // alle verbotenen Zahlen in array speichern
  $verboten = array(1, 2, 3, 4, 5, 6, 7 , 8, 9);
  
  if(in_array($rand, $verboten))
  {
      // EDIT:
      //return mt_rand($min, $max);
      return my_rand($min, $max);
  }
  else {
      return $rand;
  }
  
}

function my_rand2($min, $max) {
  
  $rand = mt_rand($min, $max);
  
  // alle verbotenen Zahlen in array speichern
  $verboten = array(1, 2, 3, 4, 5, 6, 7 , 8, 9);
  
  while(in_array($rand, $verboten)) {
    $rand = mt_rand($min, $max);
  }
  
  return $rand;
}

print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";
print my_rand1($min, $max) . "<br>";

print "<br>";

print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";
print my_rand2($min, $max) . "<br>";

?>


Link

Dieser Beitrag wurde von Spezi bearbeitet: 14. September 2005 - 21:17

0

#7 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 14. September 2005 - 20:57

Es tut mir wirklich sehr leid, aber meine Funktion ist das nicht was du da in deinem Code hast. Guck mal genauer hin bitte.
0

#8 Mitglied ist offline   Spezi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 24. Februar 04
  • Reputation: 0
  • Wohnort:Wesel

geschrieben 14. September 2005 - 21:16

Zitat (Floele: 14.09.2005, 21:57)

Es tut mir wirklich sehr leid, aber meine Funktion ist das nicht was du da in deinem Code hast. Guck mal genauer hin bitte.
<{POST_SNAPBACK}>

Ach jetzt sehe ich es. :wink:

Ja jetzt funktioniert es auch.

Naja hat er jetzt 2 Funktionen. :wink:
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0