| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

29-11-2011, 18:09
|
|
werny
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 69
|
|
Zeilen zufällig ausgeben
Hallo,
ich habe eine lange Liste an Fotos in einer php Datei gespeichert:
Code:
<a title="Foto1" href="1.jpg"></a>
<a title="Foto2" href="2.jpg"></a>
<a title="Foto3" href="3.jpg"></a>
Jetzt möchte ich, daß diese Zeilen immer zufällig ausgegeben werden,
nicht immer in derselben Reihenfolge.
Also so zb.:
Code:
<a title="Foto2" href="2.jpg"></a>
<a title="Foto3" href="3.jpg"></a>
<a title="Foto1" href="1.jpg"></a>
Wie kann ich das lösen?
Danke für die Hilfe.
|

29-11-2011, 18:32
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
1. In ein Array stopfen.
2. shuffle() anwenden
3. ausgeben
|

02-12-2011, 14:47
|
|
werny
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 69
|
|
Hallo,
habe das jetzt so gelöst:
Code:
<?php
$my_array = array(
'"foto1.jpg",',
'"foto2.jpg",',
'"foto3.jpg",',
'"foto4.jpg",',
);
for ($i=0; $i<=4; $i++)
{
$random = array_rand($my_array);
$gemisch .= $my_array[$random] . "\r\n";
}
echo $gemisch;
?>
Aber so kommt mir eine Zeile oft mehrmals raus oder manche Zeilen gar nicht.
Was ist da falsch?
|

02-12-2011, 15:08
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
shuffle()
|

02-12-2011, 15:21
|
|
werny
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 69
|
|
hm,
kann mir das bitte jemand genauer erklären?
Ich verstehe nicht, warum mir bei meinem Code manche Zeilen doppelt ausgegeben werden.
Danke für die Hilfe!
|

02-12-2011, 16:12
|
|
Peacie
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 341
|
|
Du gehst in eine Schleife und machst immer mal das gleiche.
Du nimmst einen zufälligen Eintrag aus Deinem Array, fügst ihn der variable $gemisch hinzu.
Danach mischt Du erneut ALLE 4 Einträge und hängst wieder einen (von den immer noch 4) Einträgen an $gemisch an.
Dein programm tut genau das, was es tun soll.
Misch das array einmal (vor der Schleife) und erstelle in der Schleife nur Deinen String, den Du abschliessend ausgeben kannst.
Das ist btw nur eine Erklärung für Deinen Code
Geändert von Peacie (02-12-2011 um 16:14 Uhr)
Grund: wer zählen kann, sorry :)
|

02-12-2011, 17:20
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Ach, komm...
Nach fast 70 Postings in einem PHP Forum solltest du doch schon geschnallt haben:
1. wie Arrays funktionieren
2. wie das Handbuch zu lesen ist
3. wo das Handbuch zu finden ist
|

02-12-2011, 23:44
|
|
werny
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 69
|
|
Ach komm, bin blugier Newbie!
Wundere mich ja, dass mein selbst-zusammengebastelter Code irgendwie funktioniert
Da gibt es doch sicher eine bessere / elegantere Lösung oder?
Irgendjemand wird mir wohl helfen können - bitte!
|

03-12-2011, 08:38
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
Zitat von werny
Ach komm, bin blugier Newbie!
Wundere mich ja, dass mein selbst-zusammengebastelter Code irgendwie funktioniert
Da gibt es doch sicher eine bessere / elegantere Lösung oder?
Irgendjemand wird mir wohl helfen können - bitte!
|
Hmm...
Ein Newbie, welcher seit 7 Jahren dabei ist.
Und immer noch nicht in der Lage ist shuffle() einzusetzen....
Unglaublich.
Auch wenn es sich hart anhört, aber ich glaube, du hast dir das falsche Hobby ausgesucht.
PHP-Code:
<?php
error_reporting(-1);
ini_set('display_errors', TRUE);
$array = range(1,20);
$format = '<a title="Foto%1$d" href="%1$d.jpg">Foto%1$d</a><br>';
shuffle($array);
foreach ($array as $value) printf($format,$value);
|

04-12-2011, 19:29
|
|
Scriptex
Registrierter Benutzer
|
|
Registriert seit: May 2011
Beiträge: 9
|
|
Hier ist eine einfache Lösung mit einem Array und Kommentaren:
PHP-Code:
<?php // Anzahl Eintraege $eintraege = 3; // Pool fuer Fotos $foto = array('1' => '<a title="Foto1" href="1.jpg"></a>', '2' => '<a title="Foto2" href="2.jpg"></a>', '3' => '<a title="Foto3" href="3.jpg"></a>'); // Zufallszahl $zufallszahl = rand (1,$eintraege); // Ausgabe print $foto[$zufallszahl]; ?>
Du musst einfach die Anzahl der Einträge erhöhen und jeden neuen Eintrag mit einer nächsthöheren Nummer versehen, dann werden die einzelnen Einträge zufällig mit "$foto[$zufallszahl];" ausgegeben.
|

04-12-2011, 19:34
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
Zitat von Scriptex
Hier ist eine einfache Lösung mit einem Array und Kommentaren:
PHP-Code:
<?php
// Anzahl Eintraege
$eintraege = 3;
// Pool fuer Fotos
$foto = array('1' => '<a title="Foto1" href="1.jpg"></a>',
'2' => '<a title="Foto2" href="2.jpg"></a>',
'3' => '<a title="Foto3" href="3.jpg"></a>');
// Zufallszahl
$zufallszahl = rand (1,$eintraege);
// Ausgabe
print $foto[$zufallszahl];
?>
Du musst einfach die Anzahl der Einträge erhöhen und jeden neuen Eintrag mit einer nächsthöheren Nummer versehen, dann werden die einzelnen Einträge zufällig mit "$foto[$zufallszahl];" ausgegeben.
|
Und?
Wie verhinderst du Wiederholungen?
Wie sorgst du dafür, dass alle ausgegeben werden?
|

04-12-2011, 22:01
|
|
werny
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 69
|
|
??
Oh Mann o Mann!
ich möchte nicht das EINE zufällige Zeile aus dem Array ausgeben wird,
sondern ALLE Zeilen geshuffled ausgegeben werden.
also z.B.
foto2.jpg
foto3.jpg
foto1.jpg
foto5.jpg
foto.4.jpg
|

05-12-2011, 10:24
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Du wurdest jetzt mehrfach auf eine sinnvolle funktioniernde Lösung hingewiesen. Anstatt diese zu verfolgen, vergreifst du dich lieber hier im Ton, der versucht dir zu helfen?
PS: Dass der Code nicht so funktioniert wie es "gefordert" ist, hatte Combie schon 3 Stunden vorher gepostet.
|

07-12-2011, 18:06
|
|
Scriptex
Registrierter Benutzer
|
|
Registriert seit: May 2011
Beiträge: 9
|
|
Meine Lösung sollte nur als Anregung dienen. Das wirst du nicht einfach mit ein paar Zeilen Code lösen können, damit immer ein anderes Foto ausgegeben wird. Um das zu realisieren, muss man die Ausgabe zwischenspeichern und dann prüfen, was zuletzt kam, um keinen wiederholten Wert auszugeben.
PS. Der Ton einiger User gefällt mir auch nicht. Meckert nicht, macht es besser oder liefert zumindest eine bessere Lösung
|

07-12-2011, 20:53
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
|
macht es besser oder liefert zumindest eine bessere Lösung
|
*done*
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|