Roger: gleiche Zufallszahlen verhindern

hallo allerseits!

ich versuche mit

function zufall($zeilen)
{
 global $var;
 mt_srand((double)microtime()*1000000);
 $var = array();
 for ($i=0;$i<3;$i++)
 {
  array_push($var, mt_rand(0,$zeilen));
 }
}

in den array $var 3 zufällig generierte zahlen zwischen 0 und $zeilen zu schreiben.
jetzt habe ich allerdings bemerkt, dass es auch mal vorkommen kann das diese zufällig generierten zahlen nun auch mal doppelt (oder häufiger) vorkommen können.

wie kann ich das umgehen?

danke für eure hilfe!

  1. Hi

    ich versuche mit

    function zufall($zeilen)
    {
    global $var;
    mt_srand((double)microtime()*1000000);
    $var = array();
    for ($i=0;$i<3;$i++)
    {
      array_push($var, mt_rand(0,$zeilen));
    }
    }

    in den array $var 3 zufällig generierte zahlen zwischen 0 und $zeilen zu schreiben.
    jetzt habe ich allerdings bemerkt, dass es auch mal vorkommen kann das diese zufällig generierten zahlen nun auch mal doppelt (oder häufiger) vorkommen können.

    wie kann ich das umgehen?

    Indem Du prüfst, ob Deine n. Zufallszahl (n > 1) bereits vorher einmal gezogen wurde (durch Vergleich mit der 1., 2. ... (n-1). Zufallszahl). Falls schon vorhanden, neue Zufallszahl holen...

    Bei sehr kleiner Anzahl der möglichen Werte:
    Mögliche Werte in Liste, Zufallsindex holen, die Zahl aus der Liste streichen...
    Andreas

    1. Hi!

      Ich würde alle generierten Zufallszahlen in einen Array schreiben und dann immer mit in_array() prüfen ob schon vorhanden!

      Grüße
      Andreas

  2. Hallo,

    ich habe mal so ein Skript geschrieben. Vielleicht kannst Du damit was anfangen ...

    Grüße,

    Sebastian

    <?php
    /* **********************************************************************
    Filename: randompics.inc
    Description: generate random pics
    Author:  © 2002 Sebastian Becker (sebastian.becker@berlin.de)
    ********************************************************************** */

    // configuration
    $rp_default_txt = "Berliner Impressionen"; // default description text
    $rp_default_w = "150"; // default width
    $rp_default_h = "150"; // default height
    $rp_pic_num = 3; // number of images to show

    // set image path
    if($page=="guestbook"){$rp_pic_path="../img/";}else{$rp_pic_path="img/";}

    // spacer image
    $rp_spacer = "<img src="".$rp_pic_path."onepixel.gif" width="".$rp_default_w."" height="1" alt="">";

    // picture parameters
    $rp_pic[0] = 'pic01.jpg';
    $rp_pic_w[0] = '';
    $rp_pic_h[0] = '';
    $rp_pic_txt[0] = 'Brandenburger Tor';

    $rp_pic[1] = 'pic02.jpg';
    $rp_pic_w[1] = '';
    $rp_pic_h[1] = '';
    $rp_pic_txt[1] = 'Potsdamer Platz';

    $rp_pic[2] = 'pic03.jpg';
    $rp_pic_w[2] = '';
    $rp_pic_h[2] = '';
    $rp_pic_txt[2] = 'Brandenburger Tor';

    $rp_pic[3] = 'pic04.jpg';
    $rp_pic_w[3] = '';
    $rp_pic_h[3] = '';
    $rp_pic_txt[3] = 'Bundeskanzleramt';

    $rp_pic[4] = 'pic05.jpg';
    $rp_pic_w[4] = '';
    $rp_pic_h[4] = '';
    $rp_pic_txt[4] = 'Lichtsäulen am Potsdamer Platz';

    $rp_pic[5] = 'pic06.jpg';
    $rp_pic_w[5] = '';
    $rp_pic_h[5] = '';
    $rp_pic_txt[5] = 'Sony Potsdamer Platz (Detail)';

    $rp_pic[6] = 'pic07.jpg';
    $rp_pic_w[6] = '';
    $rp_pic_h[6] = '';
    $rp_pic_txt[6] = 'Skulptur am Checkpoint Charlie';

    $rp_pic[7] = 'pic08.jpg';
    $rp_pic_w[7] = '';
    $rp_pic_h[7] = '';
    $rp_pic_txt[7] = 'Hamburger Bahnhof';

    $rp_pic[8] = 'pic09.jpg';
    $rp_pic_w[8] = '';
    $rp_pic_h[8] = '';
    $rp_pic_txt[8] = 'Funkturm';

    $rp_pic[9] = 'pic10.jpg';
    $rp_pic_w[9] = '';
    $rp_pic_h[9] = '';
    $rp_pic_txt[9] = 'Brandenburger Tor & Reichstag';

    $rp_pic[10] = 'pic11.jpg';
    $rp_pic_w[10] = '';
    $rp_pic_h[10] = '';
    $rp_pic_txt[10] = 'Fernsehturm';

    $rp_pic[11] = 'pic12.jpg';
    $rp_pic_w[11] = '';
    $rp_pic_h[11] = '';
    $rp_pic_txt[11] = 'Kurfürstendamm';

    $rp_pic[12] = 'pic13.jpg';
    $rp_pic_w[12] = '';
    $rp_pic_h[12] = '';
    $rp_pic_txt[12] = 'Gedächtniskirche';

    $rp_pic[13] = 'pic14.jpg';
    $rp_pic_w[13] = '';
    $rp_pic_h[13] = '';
    $rp_pic_txt[13] = 'Hackesche Höfe';

    $rp_pic[14] = 'pic15.jpg';
    $rp_pic_w[14] = '';
    $rp_pic_h[14] = '';
    $rp_pic_txt[14] = 'Hochhäuser am Potsdamer Platz';

    $rp_pic[15] = 'pic16.jpg';
    $rp_pic_w[15] = '';
    $rp_pic_h[15] = '';
    $rp_pic_txt[15] = 'Schloss Charlottenburg';

    $rp_pic[16] = 'pic17.jpg';
    $rp_pic_w[16] = '';
    $rp_pic_h[16] = '';
    $rp_pic_txt[16] = 'Goldelse auf der Siegessäule';

    $rp_pic[17] = 'pic18.jpg';
    $rp_pic_w[17] = '';
    $rp_pic_h[17] = '';
    $rp_pic_txt[17] = 'Sony Potsdamer Platz (Dach)';

    $rp_pic[18] = 'pic19.jpg';
    $rp_pic_w[18] = '';
    $rp_pic_h[18] = '';
    $rp_pic_txt[18] = 'Synagoge an der Oranienburger Straße';

    /*

    $rp_pic[19] = 'pic20.jpg';
    $rp_pic_w[19] = '';
    $rp_pic_h[19] = '';
    $rp_pic_txt[19] = '';

    $rp_pic[20] = 'pic21.jpg';
    $rp_pic_w[20] = '';
    $rp_pic_h[20] = '';
    $rp_pic_txt[20] = '';

    $rp_pic[21] = 'pic22.jpg';
    $rp_pic_w[21] = '';
    $rp_pic_h[21] = '';
    $rp_pic_txt[21] = '';

    $rp_pic[22] = 'pic23.jpg';
    $rp_pic_w[22] = '';
    $rp_pic_h[22] = '';
    $rp_pic_txt[22] = '';

    $rp_pic[23] = 'pic24.jpg';
    $rp_pic_w[23] = '';
    $rp_pic_h[23] = '';
    $rp_pic_txt[23] = '';

    $rp_pic[24] = 'pic25.jpg';
    $rp_pic_w[24] = '';
    $rp_pic_h[24] = '';
    $rp_pic_txt[24] = '';

    $rp_pic[25] = 'pic26.jpg';
    $rp_pic_w[25] = '';
    $rp_pic_h[25] = '';
    $rp_pic_txt[25] = '';

    $rp_pic[26] = 'pic27.jpg';
    $rp_pic_w[26] = '';
    $rp_pic_h[26] = '';
    $rp_pic_txt[26] = '';

    $rp_pic[27] = 'pic28.jpg';
    $rp_pic_w[27] = '';
    $rp_pic_h[27] = '';
    $rp_pic_txt[27] = '';

    $rp_pic[28] = 'pic29.jpg';
    $rp_pic_w[28] = '';
    $rp_pic_h[28] = '';
    $rp_pic_txt[28] = '';

    $rp_pic[29] = 'pic30.jpg';
    $rp_pic_w[29] = '';
    $rp_pic_h[29] = '';
    $rp_pic_txt[29] = '';

    */

    // Zahl der Bilder feststellen
    $rp_picCount = $rp_pic.length;

    // ---------- nothing to change from here ----------

    function generateNumbers($min, $max, $anz)
    {
    $array = range($min, $max);
    srand ((double)microtime()*1000000);
    for($x=0;$x<$anz;$x++)
    {
    $i = rand(1, count($array))-1;
    $erg[] = $array[$i];
    array_splice($array, $i, 1);
    }
    return $erg;
    }

    // generate 3 different numbers
    $rp_ran_array = generateNumbers(0, count($rp_pic)-1, $rp_pic_num);

    $rp_str = "";

    for($j=0;$j<$rp_pic_num;$j++)
    {
    $rp_ran = $rp_ran_array[$j];
    $rp_p = $rp_pic_path.$rp_pic[$rp_ran];
    $rp_p_w = $rp_pic_w[$rp_ran];
    $rp_p_h = $rp_pic_h[$rp_ran];
    $rp_p_txt = $rp_pic_txt[$rp_ran];

    // use default values if no values are set
    if($rp_p_txt=="")$rp_p_txt=$rp_default_txt; if($rp_p_w=="")$rp_p_w=$rp_default_w; if($rp_p_h=="")$rp_p_h=$rp_default_h;

    // build HTML string
    $rp_str .= $rp_spacer;
    $rp_str .= "<img src="".$rp_p."" width="".$rp_p_w."" height="".$rp_p_h."" border="0" alt="".$rp_p_txt."" title="".$rp_p_txt."" onMouseOver="window.status=this.alt;return true;" onMouseOut="window.status='';return true;">";
    }

    // print HTML
    echo($rp_str);

    // print picture description
    function picText($rp_pic)
    {
    global $rp_ran;
    global $rp_alt_txt;
    $rp_ran = $rp_ran[$rp_pic-1];
    echo($rp_alt_txt[$rp_ran]);
    }

    ?>