Autor |
Nachricht |
bluespoon
Threadersteller
Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht:
|
Verfasst Di 19.06.2007 13:16
Titel Zufallstext ausgeben |
|
|
Hallo,
ich habe eine Frage. Untenstehendes Script habe ich gerade gefunden.
Es gibt jeweils einen Text nach dem Zufallsprinzip aus. Aber ist es auch
möglich 10 Texte via Zufallsprinzip auszugeben, ohne dass sie doppelt
erscheinen. Vorausgesetzt, ich habe vorher auch mehr als 10 Texte
eingegeben ...
Code: | <?php
$quotes[] = "This is a quote";
$quotes[] = "This is another";
$quotes[] = "quote 3";
$quotes[] = "quote 4";
$quotes[] = "quote 5";
$quotes[] = "quote 6";
srand ((double) microtime() * 1000000);
$randomquote = rand(0,count($quotes)-1);
echo "<p>" . $quotes[$randomquote] . "</p>";
?> |
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Di 19.06.2007 13:48
Titel
|
|
|
Zitat: | Aber ist es auch möglich 10 Texte via Zufallsprinzip auszugeben |
Ja.
Zitat: | ohne dass sie doppelt erscheinen |
Ja, wäre auch möglich. Dann solltest du die Sache allerdings anders angehen.
Vermutlich hast du überhaupt keine Ahnung vom Programmieren, schätze ich mal...
Also will ich das Prinzip mal erklären.
Du hast dort ein Array mit deinen Texten drin:
Code: | $quotes[] = "This is a quote";
...
|
Dann wird der Zufallsgenerator initialisiert:
Code: | srand ((double) microtime() * 1000000); |
Dann wird eine Zufallszahl zwischen 0 und der Anzahl der vorhandenen Arrayelemente ausgewählt.
Code: | $randomquote = rand(0,count($quotes)-1); |
Als letztes wird dieses Element ausgegeben:
Code: | echo "<p>" . $quotes[$randomquote] . "</p>"; |
Du könntest das Spiel mit der Zufallszahl einfach 10mal hintereinander machen.
Dann hättest du aber nicht die Gewissheit, daß die Zahlen nicht öfters dran kommen.
Du könntest jetzt zwar ein weiteres Array erstellen und dort speichern, welche Zahlen schon dran waren und dann in einer Abfrage prüfen - aber das wäre zu viel Arbeit...
Also ganz einfach:
1. Array erstellen.
Code: | $quotes[] = "This is a quote";
$quotes[] = "This is another";
$quotes[] = "quote 3";
$quotes[] = "quote 4";
$quotes[] = "quote 5";
$quotes[] = "quote 6"; |
2. Array mischen.
3. Ein oder mehr Elemente ausgeben.
Da das gesamte Array jetzt gemischt wurde, kannst du einfach der Reihe nach die Elemente ausgeben.
Erstes zufälliges Element:
Code: | echo "<p>" . $quotes[0] . "</p>"; |
zweites:
Code: | echo "<p>" . $quotes[1] . "</p>"; |
drittes:
Code: | echo "<p>" . $quotes[2] . "</p>"; |
Und wenn du zehn haben willst, dann kannst du natürlich einfach in einer Schleife die ersten zehn Elemente des Arrays ausgeben:
Code: | for ( $i=0; $i<10; $i++ )
{
echo "<p>" . $quotes[$i] . "</p>";
} |
Zuletzt bearbeitet von rob am Di 19.06.2007 13:53, insgesamt 1-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
bluespoon
Threadersteller
Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht:
|
Verfasst Di 19.06.2007 14:05
Titel Problem gelöst! |
|
|
Hey,
vielen Dank ... hat gefunzt. Von PHP habe ich tatsächlich noch
net so viel Ahnung. Also hier noch einmal der komplette Code
für ähnliche Probleme:
Code: | <?php
$quotes[] = "1";
$quotes[] = "2";
$quotes[] = "3";
$quotes[] = "4";
$quotes[] = "5";
$quotes[] = "6";
$quotes[] = "7";
$quotes[] = "8";
$quotes[] = "9";
$quotes[] = "10";
$quotes[] = "11";
$quotes[] = "12";
$quotes[] = "13";
$quotes[] = "14";
shuffle($quotes);
srand ((double) microtime() * 1000000);
$randomquote = rand(0,count($quotes)-1);
for ( $i=0; $i<10; $i++ )
{
echo "<p>" . $quotes[$i] . "</p>";
}
?> |
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Di 19.06.2007 14:32
Titel
|
|
|
Nee, das ist jetzt zuviel des Guten...
Die Funktion shuffle() würfelt deine Array-Elemente schon alleine durcheinander.
Du hast also zwei Zeilen Code noch zuviel.
Die beiden Zeilen kannst du weglassen:
Code: | srand ((double) microtime() * 1000000);
$randomquote = rand(0,count($quotes)-1); |
Solltest du allerdings noch mit einer wirklich alten PHP-Version (kleiner 4.2.0) arbeiten, dann wäre nur eine Zeile zuviel.
In PHP < V4.2.0 mußt du den Zufallsgenerator noch mit srand() füttern.
Mittlerweile ist das aber nicht mehr nötig...
So sollte also dein Code jetzt aussehen, um zehn Zufallselemente auszugeben:
Code: | <?php
$quotes[] = "1";
$quotes[] = "2";
$quotes[] = "3";
$quotes[] = "4";
$quotes[] = "5";
$quotes[] = "6";
$quotes[] = "7";
$quotes[] = "8";
$quotes[] = "9";
$quotes[] = "10";
$quotes[] = "11";
$quotes[] = "12";
$quotes[] = "13";
$quotes[] = "14";
shuffle($quotes);
for ( $i=0; $i<10; $i++ )
{
echo "<p>" . $quotes[$i] . "</p>";
}
?> |
|
|
|
|
|
S.Franke
Dabei seit: 27.03.2007
Ort: Bielefeld
Alter: 45
Geschlecht:
|
Verfasst Di 19.06.2007 15:10
Titel
|
|
|
Hm,
so wie ich das verstanden habe, will er aber aus einer Menge X ein Element ziehen.
Im nächsten Durchgang dann ein Element aus X-1.
Das ist Quasi das Lotto Prinzip.
Falls dem so ist, kann ich dafür eine ideale Lösung bereitstellen. Einfach kurz bescheid sagen.
LG Stulle
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Di 19.06.2007 15:56
Titel
|
|
|
Ich dachte, es geht darum zehn zufällige Texte aufeinmal auszugeben?
Wenn dem nicht so ist, sollte der Einsatzzweck der Funktion mal etwas genauer beschrieben werden.
Eventuell gibt es dann, wie S.Franke sagt, eine für diesen Zweck, bessere Lösung.
|
|
|
|
|
|
|
|
Ähnliche Themen |
Datenbank ausgeben
[PHP] Whitespace mit ausgeben
[PHP] Textdatei mit BOM ausgeben?
Kombinationen mit PHP ausgeben
PHP | SQL - Befehle der Datenbankstruktur ausgeben
DB-Daten in Div ausgeben (Echtzeit)
|
|