Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Mathematische Funktionen
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite PHP-Skripte
Seite PHP Befehlsreferenz
Seite PHP5 Praxisbuch
Seite Gratis-Videolektionen*
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

Seite Anbieterverzeichnis

 
* 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 79.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 Startwertes.


Funktion Beispiel Beschreibung
srand($x) srand(100);
srand ((double)microtime()*1000000);
Setzt den Startwert für den Zufallsgenerator.
rand([$min],[$max]) rand() => 7438
rand(0,10) => 4
Gibt eine Zufallszahl zwischen 0 und 1 oder, wenn benutzt, zwischen $min und $max zurück.
getrandmax() getrandmax() => 32767 Gibt 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) => 7
Gibt eine Zufallszahl zwischen 0 und 1 oder, wenn benutzt, zwischen $min und $max zurück.
mt_getrandmax() mt_getrandmax() => 2147483647 Gibt 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($bild255255255);
$schwarz imagecolorallocate ($bild000);
imagefilledrectangle($bild00$breite$hoehe$weiss);
imagestring($bild4130"Kunde: ".$kunde$schwarz);
imagepng($bild);
imagedestroy($bild);
?>



Hiermit lassen sich zufällig dynamisch erzeugte Signaturen realisieren, welche mit Hilfe der Funktionen der GD-Bibliothek in eine PNG-Datei überführt werden. Sie können gerne auch vollgendes 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($bild255255255);
$schwarz Imagecolorallocate ($bild000);
imagefilledrectangle($bild00$breite$hoehe$weiss);
imagestring($bild411"Uhrzeit: ".$zeit$schwarz);
imagestring($bild4115"Datum: ".$datum$schwarz);
imagestring($bild4130"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 darstellt. 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 hierbei 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(1count($werte))-1;
          
$erg[] = $werte[$i];
          
array_splice($werte$i1);
     }
     return 
$erg;
}

$zufalls_array gen_zahlen(110010);
echo 
join("-"$zufalls_array);
?>




Ausgabe



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



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


Ziehenung von Zufallseinträge ohne Wiederholung

Nach dem selben Prinzip lassen sich auch Einträge aus einem Array zufällig ausgeben, ohne das 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(1count($daten))-1;
          
$erg[] = $daten[$i];
          
array_splice($daten$i1);
     }
     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 in dem 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. Die mt_funktionen wurden von Mersenne Twister (mt) entwickelt. Mehr erfahren Sie unter folgenden Adressen:



 


Mathematische Konstanten
 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2006 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de