Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Sprachelemente und Syntax  Teil von  Mathematische Funktionen
Letztes Update: 04.09.2007 20:49:50

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Zufallszahlen




Zufallszahlen werden häufig benötigt, um Vorgänge zu steuern oder beispielsweise Kennwörter zu erzeugen. Zufallsfolgen beruhen auf mathematischen Funktionen, die zwar einen chaotischen Verlauf haben, aber dennoch einer strengen Folge gehorchen, sie sind pseudozufällig. Die Zufälligkeit wird erst erzeugt, wenn der Startwert variiert. Die folgende Tabelle zeigt Funktionen zum Abruf der Zufallswerte und zum Setzen des Startwerts.

FunktionBeispielBeschreibung
srand($x)srand(100); srand ((double)microtime()*1000000);Setzt den Startwert für den Zufallsgenerator.
rand([$min],[$max])rand() => 7438 rand(0,10) => 4Gibt eine Zufallszahl zwischen 0 und 1 oder, wenn benutzt, zwischen $min und $max zurück.
getrandmax()getrandmax() => 32767Gibt die höchstmögliche Zahl an, die rand() zurückgeben kann.
mt_srand($x)mt_srand(100); mt_srand((double)microtime()*1000000);Setzt den Startwert für den Zufallsgenerator.
mt_rand([$min],[$max])mt_rand() => 322911911 mt_rand(0,10) => 7Gibt eine Zufallszahl zwischen 0 und 1 oder, wenn benutzt, zwischen $min und $max zurück.
mt_getrandmax()mt_getrandmax() => 2147483647Gibt die höchstmögliche Zahl an, die mt_rand() zurückgeben kann.


Beispiel

<?php
// PNG-Grafik definieren
header("Content-type: image/png");

$kunden = array(
    "IBM",
    "Apple",
    "Microsoft",
    "Macromedia",
    "Adobe"
    );

$zufall = mt_rand(0,count($kunden)-1);

$kunde = $kunden[$zufall];

$breite = 200;
$hoehe = 50;
$bild = imagecreate($breite, $hoehe);
$weiss = imagecolorallocate($bild, 255, 255, 255);
$schwarz = imagecolorallocate ($bild, 0, 0, 0);
imagefilledrectangle($bild, 0, 0, $breite, $hoehe, $weiss);
imagestring($bild, 4, 1, 30, "Kunde: ".$kunde, $schwarz);
imagepng($bild);
imagedestroy($bild);
?>

Hiermit lassen sich zufällig dynamisch erzeugte Signaturen realisieren, welche mithilfe der Funktionen der GD-Bibliothek in eine PNG-Datei überführt werden. Sie können gerne auch folgendes Beispiel testen:

<?php
// PNG-Grafik definieren
header("Content-type: image/png");

$zeit = date("H:i:s", time());
$datum = date("d.m.Y", time());
$ip = $_SERVER["REMOTE_ADDR"];
$breite = 200;
$hoehe = 50;
$bild = imagecreate($breite, $hoehe);
$weiss = Imagecolorallocate($bild, 255, 255, 255);
$schwarz = Imagecolorallocate ($bild, 0, 0, 0);
imagefilledrectangle($bild, 0, 0, $breite, $hoehe, $weiss);
imagestring($bild, 4, 1, 1, "Uhrzeit: ".$zeit, $schwarz);
imagestring($bild, 4, 1, 15, "Datum: ".$datum, $schwarz);
imagestring($bild, 4, 1, 30, "Deine IP: ".$ip, $schwarz);
imagepng($bild);
imagedestroy($bild)
?>

Das Beispiel erzeugt eine PNG-Datei, welche die aktuelle Uhrzeit, das Datum und die IP-Adresse des Besuchers enthält. Es eignet sich somit ebenfalls zur Erzeugung von dynamischen Signaturen.


Ziehung von Zufallszahlen ohne Wiederholung

Eine weitere Anwendung wäre es, aus einem Zahlenbereich von $min bis $max zufällig $anz Zahlen auszuwählen, ohne dass Zahlen doppelt vorkommen.


Beispiel

<?PHP
function gen_zahlen($min, $max, $anz) {
  $werte = range($min, $max);
  mt_srand ((double)microtime()*1000000);
  for($x = 0; $x < $anz; $x++) {
    $i = mt_rand(1, count($werte))-1;
    $erg[] = $werte[$i];
    array_splice($werte, $i, 1);
  }
  return $erg;
}

$zufalls_array = gen_zahlen(1, 100, 10);
echo join("-", $zufalls_array);
?>

Ausgabe
63-84-24-67-42-9-13-33-32-23

Wie Sie sehen, wurden 10 Zahlen nach dem Zufallsprinzip ermittelt, ohne das eine doppelt vorkommt.


Ziehung von Zufallseinträgen ohne Wiederholung

Nach demselben Prinzip lassen sich auch Einträge aus einem Array zufällig ausgeben, ohne dass es zu Wiederholungen kommt.

Beispiel

<?PHP
$kunden = array(
    "IBM",
    "Microsoft",
    "Adobe",
    "Macromedia",
    "Apple",
    "SAP"
    );

function gen_zufall($anz,$daten) {
  mt_srand ((double)microtime()*1000000);
  for($x = 0; $x < $anz; $x++) {
    $i = mt_rand(1, count($daten))-1;
    $erg[] = $daten[$i];
    array_splice($daten, $i, 1);
  }
  return $erg;
}

$zufalls_array = gen_zufall(3,$kunden);
echo join("-", $zufalls_array);
?>

Ausgabe
Adobe-Apple-Microsoft

Sie können die Funktion sogar zum Mischen von Arrays verwenden, indem Sie die folgende Codezeile wie folgt anpassen:

$zufalls_array = gen_zufall(count($kunden),$kunden);

Und schon erhalten Sie sämtliche Einträge des Arrays, jedoch gut vermischt.

Hinweis: Die Funktionen mit dem Präfix mt_ sollten bevorzugt werden, da sie um einiges schneller arbeiten. Sie wurden von Mersenne Twister (mt) entwickelt. Mehr erfahren Sie unter folgenden Adressen:
www.scp.syr.edu/~marc/hawk/twister.html
www.math.keio.ac.jp/~matumoto/emt.html



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt