Zufallszahl soll nur einmal vorhanden sein ...

Hattrix

Erfahrenes Mitglied
Hallo,

in diesem Beispiel werden die Tore festgelegt, in welcher Minute sie geschossen werden. Leider tauchen da auch gern zweimal oder 3mal die gleiche Minute auf. Wie kann ich dem entgegenwirken?

PHP:
$sql = "SELECT id,tore1,tore2 FROM tabelle WHERE spieltag='2'";
$result = mysql_query($sql) OR die(mysql_error());

while($row = mysql_fetch_row($result))
{
  $tore_h=array();
  $tore_g=array();

  for($i=0;$i<$row[1];$i++)
  {
    $tore_h[]=rand(1,90);
  }

  for($j=0;$j<$row[2];$j++)
  {
    $tore_g[]=rand(1,90);
  }

  sort($tore_h);
  sort($tore_g);

  $toreh='';
  $toreg='';

  for($a=0;$a<$row[1];$a++)
  {
    $toreh=$toreh.$tore_h[$a].'|';
  }

  for($b=0;$b<$row[2];$b++)
  {
    $toreg=$toreg.$tore_g[$b].'|';
  }
}
 
Wenn du nicht willst, dass Werte doppelt vorkommen, musst du die bereits ermittelten Zufallswerte mit berücksichtigen. Prüfe also einfach, ob der neue Zufallswert bereits im Array vorkommt.
 
Der 1.Link ist einleuchtend mit dem in_array, im 2.Link sehe ich irgendwie gar kein nutzen.

In meinem Beispiel müsste ich in_array in den for-schleifen anwenden.

z.B.
PHP:
for($j=0;$j<$row[2];$j++)
  {
    $tore_g[]=rand(1,90);
  }

Hier müsste ich das "if(in_array...." nach "$tore_g[]=rand(1,90);" setzen, doch dann sind die beiden zahlen ja bereits enthalten? Entweder ich steh jetzt auf dem Schlauch oder es ist zu einfach/schwer?

Edit:
PHP:
  for($i=0;$i<$row[1];$i++)
  {
    $th=rand(1,90);

    if(in_array("'.$th.'", $tore_h[]))
    else $tore_h[]=rand(1,90);
  }

Bin ich auf dem richtigen oder falschen dampfer?
 
Zuletzt bearbeitet:
Probier mal Folgendes:
PHP:
$j = 0;
do {
	$rand = rand(1,90);
} while( !in_array($rand, $tore_g) && ($tore_g[]=$rand) && ++$j<$row[2] );
Oder aber:
PHP:
for( $j=0; $j<$row[2]; $j++ ) {
	$rand = rand(1,90);
	if( in_array($rand, $tore_g) ) {
		$j--;
		continue;
	}
	$tore_g[] = $rand;
}
Oder aber:
PHP:
do {
	$tore_g[] = rand(1,90);
	$tore_g = array_unique($tore_g);
} while( count($tore_g) < $row[2] );
 
Du würdest mit in_array prüfen, ob der Wert bereits im Array enthalten ist und so wie ich dich verstanden habe - wenn ja - soll ein neuer Zufallswert ermittelt werden.
Hatte da mit dem continue einen kleinen Logikfehler, denn dann wird der nächste Schleifendurchlauf gestartet und somit ein Wert weniger ermittelt, als Tore gefallen sind.
Anderer Ansatz:
PHP:
while(in_array(...)){
// Zufallszahl erzeugen
}

zu deinem edit:
Bist auf dem Richtigen ;)
Allerdings wird dann, falls zufälligerweise nochmal der Gleiche Wert bei rauskommt, wieder ein Wert 2fach vorkommen.
--> while()-Lösung

MfG
 
@gumbo:
Dein zweiten Ansatz halte ich für effektiver. Es funktioniert zwar, aber bekomme immer ne Fehlermeldung:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in
 
Zurück