PHP 4.3

5.8.1 Arrayfunktionen zum Mischen von Elementen

PHP stellt in seinen Arrayfunktionen auch Möglichkeiten zum Durchmischen der Elemente zur Verfügung. Stellen Sie sich beispielsweise vor, Sie möchten die Besucher Ihrer Website mit einem kleinen Quiz unterhalten, möchten aber nicht, dass die Fragen in immer gleicher Reihenfolge erscheinen. Die Funktion shuffle() dient diesem Zweck, indem sie die Reihenfolge der Arrayeinträge nach dem Zufallsprinzip durchmischt. Beachten Sie jedoch, dass beim Durchmischen des Arrays mit shuffle() alle zugewiesenen Indizes verloren gehen, da shuffle() gleichermaßen die Indizes mischt.

Da das Mischen der Elemente nach einem Zufallsprinzip geschehen soll, wollen wir uns kurz mit dem Thema Zufallszahlenfunktionen in PHP auseinandersetzen.
Zufallszahlen werden bei der Entwicklung von Software häufig benötigt. Denken Sie zum Beispiel an Kryptografiesoftware oder auch einfach an Computerspiele. Normalerweise erwarten wir von Computern, dass der Faktor Zufall im Sinne der Fehlerfreiheit des Computers nicht eintritt. Computergenerierte Zufallszahlen stellen insofern eine gewisse Herausforderung dar. Die Zufallsfunktionen vieler Programmier- und Skriptsprachen sind daher Pseudozufallsfunktionen, die zwar scheinbar zufällige Zahlen liefern, aber nichtsdestotrotz nach einem bestimmten, sich wiederholenden Muster ablaufen. Um dieses Muster zu beeinflussen und das Ergebnis "zufälliger" zu gestalten, wird daher meist auf Startwerte zurückgegriffen. Das gilt auch für shuffle(), vor deren Aufruf wir die Funktion srand() nutzen, um einen Startwert (engl. seed) zu ermitteln.
srand() selbst übergeben wir als Parameter den Ausdruck (double)microtime()*1000000. Dieser Ausdruck wird von den Entwicklern von PHP selbst vorgeschlagen. microtime() gibt die Sekunden und Mikrosekunden, die seit dem 1. Januar 1970, 0:00:00 Uhr UTC vergangen sind, zurück. (UTC ist die Bezeichnung für die internationale Zeit, historisch bedingt auch oft als Greenwich Mean Time / GMT bezeichnet.)
Im Ergebnis entsteht so ein Zufallsmuster, das unseren Ansprüchen mehr als genügt.

Um shuffle() sinnvoll einsetzen zu können, erstellen Sie zuerst ein Array. Wir verzichten an dieser Stelle darauf, das altbekannte Früchte-Array zu initialisieren, sondern stellen Ihnen gleich eine weitere interessante Arrayfunktion vor: range(). Sie erzeugen damit unter Angabe eines Minimal- und Maximalwertes ein Array, das dann alle ganzen Zahlen zwischen diesen (und einschließlich dieser) Werte enthält.

Das Beispiel:
<?php

  $nummern = range(0,5);

  echo "Vor dem Durchmischen mit shuffle():<br>";

  echo $nummern[0]."<br>";
  echo $nummern[1]."<br>";
  echo $nummern[2]."<br>";
  echo $nummern[3]."<br>";
  echo $nummern[4]."<br>";
  echo $nummern[5]."<br>";

  srand((double)microtime()*1000000);

   shuffle($nummern);

  echo "<br>Nach dem <a href=\"bsp_504i.php\">Durchmischen</a>:<br>";

  echo $nummern[0]."<br>";
  echo $nummern[1]."<br>";
  echo $nummern[2]."<br>";
  echo $nummern[3]."<br>";
  echo $nummern[4]."<br>";
  echo $nummern[5]."<br>";

?>
 

Kommentare (0)

Ihr Kommentar

Name