rickjames: Zufallsskript für Bingo-Spiel

Moin!

Ich bastele mir grad ein Bingo-Spiel. Habe einen Pool von ca. 300 Bildern (kleine GIFs) mit verschiedenen Begriffen.

Nun habe ich mir ein Zufallsskript gesucht, welches 25 Begriffe auf eine 5x5 Tabelle verteilt. Hier das Skript:

<?php  
$vn = "pics/.";  
  
$verzeichnis = opendir($vn);  
while($file = readdir($verzeichnis)) {  
    $s = @getimagesize($vn."/".$file);  
    if(in_array($s[2], array(1,2,3)))  
        $auswahl[] = $file;  
}  
mt_srand((double)microtime()*1000000);  
$number = mt_rand(0,count($auswahl)-1);  
echo "<img src='".$vn."/".$auswahl[$number]."'>";  
?>

Dazu der HTML-Code:

<table class="sample" cellspacing="0" cellpadding="0">  
<tr>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
</tr>  
<tr>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
</tr>  
<tr>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
</tr>  
<tr>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
</tr>  
<tr>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
 <td><?php include("zufall.php"); ?></td>  
</tr>  
</table>

Mein Problem: Das Skript sucht nicht 25 verschiedene, sondern irgendwelche 25 Begriffe aus. Also kann "Tor" z.B. theoretisch 25x ausgewählt werden.

Wie kann ich das verhindern?

Im Anhang die online-Version des Spiels als Link!

  1. Hallo,

    Ich bastele mir grad ein Bingo-Spiel. Habe einen Pool von ca. 300 Bildern (kleine GIFs) mit verschiedenen Begriffen.
    Nun habe ich mir ein Zufallsskript gesucht, welches 25 Begriffe auf eine 5x5 Tabelle verteilt. Hier das Skript:

    <td><?php include("zufall.php"); ?></td>
    <td><?php include("zufall.php"); ?></td>

    Mein Problem: Das Skript sucht nicht 25 verschiedene, sondern irgendwelche 25 Begriffe aus. Also kann "Tor" z.B. theoretisch 25x ausgewählt werden.

    statt 25-mal Dein Skript aufzurufen, ist es cleverer die 25 Bilder auf einen Schlag zufällig auszuwählen und an den entsprechenden Stellen einzufügen.

    Dabei kann Dir die Funktion array_rand() helfen.

    Freundliche Grüße

    Vinzenz

    1. Dabei kann Dir die Funktion array_rand() helfen.

      Da ist das aber nur mit Wörtern angegeben - wie funktioniert so etwas mit Bildern?

      1. echo $begrüßung;

        » Dabei kann Dir die Funktion array_rand() helfen.
        Da ist das aber nur mit Wörtern angegeben - wie funktioniert so etwas mit Bildern?

        Du verarbeitest doch keine Bilder sondern nur Wörter (in Form von Dateinamen).

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          »» » Dabei kann Dir die Funktion array_rand() helfen.
          »» Da ist das aber nur mit Wörtern angegeben - wie funktioniert so etwas mit Bildern?

          Du verarbeitest doch keine Bilder sondern nur Wörter (in Form von Dateinamen).

          echo "$verabschiedung $name";

          <?php  
          srand((float) microtime() * 10000000);  
          $input = array("001.gif", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");  
          $rand_keys = array_rand($input, 2);  
          echo $input[$rand_keys[0]] . "\n";  
            
          ?>
          

          Nun sieht es so aus:

          http://east-park.de/bingo/bingo.php

          Kenne mich mit PHP nicht so gut aus - wie werden Bilder angezeigt?

          1. <?php

            srand((float) microtime() * 10000000);
            $input = array("001.gif", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");
            $rand_keys = array_rand($input, 2);
            echo $input[$rand_keys[0]] . "\n";

            ?>

            
            >   
            > Nun sieht es so aus:  
            >   
            > http://east-park.de/bingo/bingo.php  
            >   
            > Kenne mich mit PHP nicht so gut aus - wie werden Bilder angezeigt?  
              
            Habe ich behoben, aber es werden immer noch mehrere gleichzeitig ausgewählt. :(
            
            1. Es funktioniert, wenn ich es so mache:

              <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">  
                
              <div align="center">  
                
              <img src="header.gif" width="399" height="40" border="0" alt="">  
                
              <br><br>  
                
              <table class="sample" cellspacing="0" cellpadding="0">  
              <?php include("zufall.php"); ?>  
              </table>  
                
              </div>  
                
              </body>
              
              <?php  
              $input = array("<img src=\"001.gif\">", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");  
              $rand_keys = array_rand($input, 25); ?>  
                
              <tr>  
               <td><?php  echo $input[$rand_keys[0]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[1]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[2]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[3]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[4]] . "\n";?></td>  
              </tr>  
              <tr>  
               <td><?php  echo $input[$rand_keys[5]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[6]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[7]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[8]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[9]] . "\n";?></td>  
              </tr>  
              <tr>  
               <td><?php  echo $input[$rand_keys[10]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[11]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[12]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[13]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[14]] . "\n";?></td>  
              </tr>  
              <tr>  
               <td><?php  echo $input[$rand_keys[15]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[16]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[17]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[18]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[19]] . "\n";?></td>  
              </tr>  
              <tr>  
               <td><?php  echo $input[$rand_keys[20]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[21]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[22]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[23]] . "\n";?></td>  
               <td><?php  echo $input[$rand_keys[24]] . "\n";?></td>  
              </tr>
              

              Danke an alle, die mitgeholfen haben!

              1. Hello,

                Es funktioniert, wenn ich es so mache:

                <table class="sample" cellspacing="0" cellpadding="0">
                <?php include("zufall.php"); ?>
                </table>

                </div>

                </body>[/code]

                [code lang=php]<?php

                $input = array("<img src="001.gif">", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");

                Wozu nimmst Du das Image-Element in das Array auf?

                Wo stehen denn Deine Bilder? Speichere sie alle in einem gemeinsamen Verzeichnis, dann wird es ganz einfach:

                $_image_path = glob('bildverzeichnis/*.gif');

                http://www.php.net/manual/en/function.glob.php

                $_rand_keys = array_rand($_image_path, 25);

                echo "
                 <tr>
                   <td><img src="{$_rand_keys[0]}" alt="Vorschaubild" /></td>
                   <td><img src="{$_rand_keys[1]}" alt="Vorschaubild" /></td>
                   <td><img src="{$_rand_keys[2]}" alt="Vorschaubild" /></td>
                   <td><img src="{$_rand_keys[3]}" alt="Vorschaubild" /></td>
                 </tr>

                usw.

                Voraussetzung ist, dass die Pfade ohne spezielle Behandlung audgegeben werden dürfen, also nur aus ASCII-Zeichen bestehen und dass Du auch tatsächlich in jedem Element (bis $_rand_keys[24]) einen Wert hast.

                Die Tabelle kann man dann mittles des Arrays auch mit einer verschachtelten Schleife aufbauen lassen. Dann geht nachher alles wie von alleine. Du brauchst nur noch die Bilder im Verzeichnis auszutauschen und schon erscheinen sie in der tabellarischen Übersicht.

                Liebe Grüße aus Syburg bei Dortmund

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
          2. echo $begrüßung;

            srand((float) microtime() * 10000000);

            <wiederholung>Das Initialisieren des Zufallszahlengeneratore ist überflüssig und anderenorts sogar kontraproduktiv.</wiederholung>

            $input = array("001.gif", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");
            $rand_keys = array_rand($input, 2);

            Wenn du 25 verschiedene Werte haben möchtest, musst du
            a) sie auch auf einmal herausnehmen und dann nur diese weiterverarbeiten, oder
            b) du nimmst immer nur wenige, musst diese dann aber aus dem Pool der noch zur Verfügung stehenden streichen.
            Mit array_rand($input, 25) erhältst du ein Array mit den Keys von 25 verschiedenen Einträgen aus $input. Variante b) ist deutlich aufwendiger.

            echo "$verabschiedung $name";

            1. Wenn du 25 verschiedene Werte haben möchtest, musst du
              a) sie auch auf einmal herausnehmen und dann nur diese weiterverarbeiten,

              Mit array_rand($input, 25) erhältst du ein Array mit den Keys von 25 verschiedenen Einträgen aus $input. Variante b) ist deutlich aufwendiger.

              <?php  
              $input = array("<img src=\"001.gif\">", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");  
              $rand_keys = array_rand($input, 25);  
              echo $input[$rand_keys[0]] . "\n";  
                
              ?>
              

              Das würde demnach bedeuten: Erstelle 25 Einträge. Bei - echo $input[$rand_keys[0]] . "\n"; - wird doch nun gesagt, es soll der 0. Eintrag angezeicht werden - setze ich eine 4 da rein, wird der 4. erzeugte Eintrag angezeigt oder? Das würde erklären, warum Zahlen über 24 (0 bis 24 sind wohl die Eintragsnummern) zu einem Abbruch führen.

              Dann müsste ich dieses echo mit den Werten 0 - 24 doch nur in die Tabellenzellen einfügen oder?

          3. Hi,

              
            
            > $input = array("001.gif", "002.gif", "003.gif", "004.gif", "005.gif", "006.gif", "007.gif", "008.gif", "009.gif", "010.gif", "011.gif", "012.gif", "013.gif", "014.gif", "015.gif", "016.gif", "017.gif", "018.gif", "019.gif", "020.gif", "021.gif", "022.gif", "023.gif", "024.gif", "025.gif", "026.gif");  
            
            

            Wenn Du das mit Deinen 300 Bildern machen willst, wird es natürlich ein ziemlich längliches Array. Wenn Du das ganze unbedingt mit Bildchen machen willst, dann schlage ich einfach mal eine andere Vorgehensweise vor:

            Du brauchst lediglich 25 verschiedene Zahlen zwischen 1 und 300 (bei 300 Bildchen), weil die Bildnamen durch die jeweiligen Zahlen bestimmt sind. Pseudo-Code dafür:

              
            $gewaehlte_zahlen = array();r (i = 1 bis 25) {  
                 // wähle eins der 300 - i + 1 verbleibenden Bildchen aus, d.h.:  
              
                 $tmp_bildnr = rand(1,300 - i + 1);  
                 // bestimme die $tmp_bildnr-te der verbleibenden Zahlen anhand von $gewaehlte_zahlen und trage sie in $gewaehlte_zahlen ein  
            }  
            
            

            Wenn Du dann noch zusätzlich die gewählten Zahlen als geordnetes Array mitführst und den letzten Schritt anhand dessen machst, dann geht das ganze sogar ziemlich effizient. Es hat den Vorteil, dass der Code kürzer ist (Du sparst das völlig redundante Riesenarray) und praktisch nicht verändert werden muss, wenn mehr Bilder hinzukommen.

            Kenne mich mit PHP nicht so gut aus - wie werden Bilder angezeigt?

            Bilder werden vom Browser angezeigt, wenn Du ihm im Quelltext der HTML-Ressource mitteilst, dass er ein Bild anzeigen möge, und wo er es herkriegen kann (URL). Auf PHP-Ebene hast Du es also in jedem Falle nur mit Text zu tun, den Du ausgeben musst.

            Deine Bilder enthalten aber ohnehin nur Schrift. Wenn Du ggf. zu kleinen Kompromissen bzgl. der Schriftart bereit bist, dann würde ich empfehlen, auf die Bilder zu verzichten und das ganze komplett als Text auszugeben. Das spart dem Benutzer immerhin 25 HTTP-Aufrufe für die einzelnen Bilder. Dann natürlich wiederum mit der Array-Variante.

            gute Nacht,
            der Bademeister

            1. echo $begrüßung;

              Du brauchst lediglich 25 verschiedene Zahlen zwischen 1 und 300 (bei 300 Bildchen), weil die Bildnamen durch die jeweiligen Zahlen bestimmt sind.

              Das geht solange gut, solange nicht, aus welchem Grund auch immer, zwischendrin ein Bild gelöscht wird, kein Nachfolger vorhanden ist und ein Neunummerieren des Rests bzw. ein Umbenennen des letzten Bildes in das der Lücke nicht möglich ist. Das Neunummerieren entspricht quasi einem Umschreiben der ID in Datensätzen und das macht man nicht, wenn einem die Beziehungen zwischen den Daten lieb sind.

              $gewaehlte_zahlen = array();

              für (i = 1 bis 25) {
                   // wähle eins der 300 - i + 1 verbleibenden Bildchen aus, d.h.:

              $tmp_bildnr = rand(1,300 - i + 1);
                   // bestimme die $tmp_bildnr-te der verbleibenden Zahlen anhand von $gewaehlte_zahlen und trage sie in $gewaehlte_zahlen ein
              }

                
              Entweder verstehe ich deinen Code nicht oder er ist falsch. Beim erste Durchlauf ermittelst du eine Zahl zwischen (inklusive) 1 und 300, beim zweiten eine zwischen 1 und 299 und so weiter. Und dabei treten Dopplungen auf, die ja nicht gewünscht sind.  
                
                
              echo "$verabschiedung $name";
              
              1. Hi,

                Das geht solange gut, solange nicht, aus welchem Grund auch immer, zwischendrin ein Bild gelöscht wird, kein Nachfolger vorhanden ist und ein Neunummerieren des Rests bzw. ein Umbenennen des letzten Bildes in das der Lücke nicht möglich ist.

                Ok, das ist ein Punkt. Aber dann den PHP-Code zu ändern, halte ich auch nicht für das eleganteste. Wenn schon, dann sollte man schon direkt nachschauen, welche Bilder vorhanden sind, und dies nicht aus einem festen Array auslesen. Oder?

                »» ~~~php

                $gewaehlte_zahlen = array();

                »» für (i = 1 bis 25) {
                »»      // wähle eins der 300 - i + 1 verbleibenden Bildchen aus, d.h.:
                »»
                »»      $tmp_bildnr = rand(1,300 - i + 1);
                »»      // bestimme die $tmp_bildnr-te der verbleibenden Zahlen anhand von $gewaehlte_zahlen und trage sie in $gewaehlte_zahlen ein
                »» }

                
                >   
                > Entweder verstehe ich deinen Code nicht oder er ist falsch.  
                  
                Sorry, der zweite Kommentar  
                
                >      bestimme die $tmp\_bildnr-te der verbleibenden Zahlen anhand von $gewaehlte\_zahlen und trage sie in $gewaehlte\_zahlen ein  
                
                sollte natürlich nicht als Kommentar zu verstehen sein, sondern als Pseudo-Code (ich wollte dem möglicherweise blöden Syntax-Highlighting entgehen). Darauf bezieht sich dann auch der nachfolgende Satz  
                  
                
                > Wenn Du dann noch zusätzlich die gewählten Zahlen als geordnetes Array mitführst und den letzten Schritt anhand dessen machst [...]  
                  
                  
                viele Grüße,  
                der Bademeister
                
                1. echo $begrüßung;

                  Wenn schon, dann sollte man schon direkt nachschauen, welche Bilder vorhanden sind, und dies nicht aus einem festen Array auslesen. Oder?

                  Ja, aus dem Ausgangsposting geht ja auch hervor, dass er das Verzeichnis direkt ausliest. Nun hat er aber danach schon alle Dateinamen in einem Array, und dann ist es auch nur noch eine Zeile, mit array_rand() sich seine gewünschte Anzahl und dazu noch dopplungsfrei zu ermitteln.

                  Sorry, der zweite Kommentar
                  »      bestimme die $tmp_bildnr-te der verbleibenden Zahlen anhand von $gewaehlte_zahlen und trage sie in $gewaehlte_zahlen ein
                  sollte natürlich nicht als Kommentar zu verstehen sein, sondern als Pseudo-Code (ich wollte dem möglicherweise blöden Syntax-Highlighting entgehen).

                  Wenn du dem Syntax-Highlighting entgehen willst, lass doch die code-Auszeichnung weg. Für Pseudo-Code (und damit syntaktisch unkorrektem Code) ist die sowieso nicht sonderlich sinnvoll.

                  Wie auch immer, du schlugst zwar vor, mit den Nummern von 1 bis 300 zu arbeiten, und ermittelst beispielsweise per Zufall die 42. So kommst du jedoch nicht an das Ziel, denn beim nächsten Durchlauf nimmst du die Nummer 300 aus dem Rennen und die 42 hingegen bleibt im Spiel. Ich kann mir nur vorstellen, dass dir doch irgendwie die Keys im Kopf rumgeisterten und nicht nur die Werte. Deine Lösung mit dem rand() geht nur dann, wenn du damit nicht den Wert sondern den Key des Elements ermittelst, einen gefundenes Element (samt Key) entfernst (unset()) und anschließend die Keys neu durchnummerierst, damit nur noch 299 Keys übrigbleiben und das lückenlos. Da ist sogar shuffle() und die ersten 25 zu nehmen einfacher zu implementieren.

                  echo "$verabschiedung $name";

                  1. Hi,

                    Ja, aus dem Ausgangsposting geht ja auch hervor, dass er das Verzeichnis direkt ausliest.

                    Stimmt. Mein Fehler.

                    Wie auch immer, du schlugst zwar vor, mit den Nummern von 1 bis 300 zu arbeiten, und ermittelst beispielsweise per Zufall die 42. So kommst du jedoch nicht an das Ziel, denn beim nächsten Durchlauf nimmst du die Nummer 300 aus dem Rennen und die 42 hingegen bleibt im Spiel.

                    Nochmal:

                    »»    bestimme die $tmp_bildnr-te der verbleibenden Zahlen anhand von $gewaehlte_zahlen und trage sie in $gewaehlte_zahlen ein

                    Die Zahl $tmp_bildnr die rand() im zweiten Durchlauf ermittelt, ist also nicht die Zahl, die letztlich im Array gespeichert wird. (Wie man obiges macht, hab ich nicht geschrieben, das waere quasi die Hausaufgabe gewesen ;-) Ist aber nicht schwer, und ich habe in meinem ersten Posting den Hinweis gegeben, wie es effizient zu machen ist).

                    Ich kann mir nur vorstellen, dass dir doch irgendwie die Keys im Kopf rumgeisterten und nicht nur die Werte. Deine Lösung mit dem rand() geht nur dann, wenn du damit nicht den Wert sondern den Key des Elements ermittelst [...],

                    Neinnnn, keine Keys, weder in meinem Kopf noch in dem Algorithmus. Einfach nur geordenetes "Ziehen ohne Zuruecklegen" aus der Menge der Zahlen zwischen 1 und 300.

                    viele Gruesse,
                    der Bademeister

  2. [latex]Mae  govannen![/latex]

    Mein Problem: Das Skript sucht nicht 25 verschiedene, sondern irgendwelche 25 Begriffe aus. Also kann "Tor" z.B. theoretisch 25x ausgewählt werden.

    Wie kann ich das verhindern?

    Du könntest z.B. alle Dateienamen in ein Array packen, dieses mischen und dann immer die ersten 25 Einträge (0-24) benutzen.

    Cü,

    Kai

    --
    „It's 106 miles to Chicago, we got a full tank of gas, half a pack of cigarettes, it's dark, and we're wearing sunglasses“.
    „Hit it!“
    Selfzeugs
    SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
  3. echo $begrüßung;

    while($file = readdir($verzeichnis)) {

    Wenn du es richtig machen willst, vergleiche $file nach der Zuweisung typsicher mit false, ansonsten werden auch Dateinamen wie "0" die Schleife beenden. Mag bei dir nicht vorkommen ...

    while(($file = readdir($verzeichnis)) !== false) {

    mt_srand((double)microtime()*1000000);

    Das Initialisieren des Zufallszahlengenerators ist seit PHP 4.2.0 nicht mehr erforderlich. Das passiert automatisch. (In sicherheitskritischen Anwendungen ist das manuelle Initialisieren mit einem vorhersagbaren Wert wie der Uhrzeit sogar als Sicherheitslücke anzusehen.)

    Mein Problem: Das Skript sucht nicht 25 verschiedene, sondern irgendwelche 25 Begriffe aus. Also kann "Tor" z.B. theoretisch 25x ausgewählt werden. Wie kann ich das verhindern?

    Du könntest zuerst alle Begriffe in ein Array einlesen, dieses mit shuffle() mischen und dann die 25 ersten davon nehmen.

    echo "$verabschiedung $name";