mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 26.04.2024 20:51 Benutzername: Passwort: Auto-Login

Thema: Zufallstext ausgeben vom 19.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Zufallstext ausgeben
Autor Nachricht
bluespoon
Threadersteller

Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht: Männlich
Verfasst Di 19.06.2007 13:16
Titel

Zufallstext ausgeben

Antworten mit Zitat Zum Seitenanfang

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>";

?>
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 19.06.2007 13:48
Titel

Antworten mit Zitat Zum Seitenanfang

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.
Code:
shuffle($quotes);

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
  View user's profile Private Nachricht senden
Anzeige
Anzeige
bluespoon
Threadersteller

Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht: Männlich
Verfasst Di 19.06.2007 14:05
Titel

Problem gelöst!

Antworten mit Zitat Zum Seitenanfang

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>";
}

?>
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 19.06.2007 14:32
Titel

Antworten mit Zitat Zum Seitenanfang

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>";
}

?>
  View user's profile Private Nachricht senden
S.Franke

Dabei seit: 27.03.2007
Ort: Bielefeld
Alter: 45
Geschlecht: Männlich
Verfasst Di 19.06.2007 15:10
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 19.06.2007 15:56
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
 
Ä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)
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.