PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufällige Anzeige von Bild + Text


buero_b
21.09.2006, 14:49:31
Guten Tag,

ich habe folgendes programmiert:

1.) die zufällige Anzeige eines Bildes

<?php
$bilder=array();
$dir=opendir("pics_3");
while($bild=readdir($dir)){
if($bild!= "." && $bild !="..")
array_push($bilder,"<img src=\"pics_3/$bild\">");
}
closedir($dir);
$max=count($bilder)-1;
$zufall=rand(0,$max);
$bild=$bilder[$zufall];
?>
// Bild ausgeben
<?php
echo $bild;
?>


2.) die zufällige Anzeige eines Textes:

<?php
$zitatarray = array(
"|Zitat1",
"|Zitat2",
"|Zitat3",
"|Zitat4",
"|Zitat5",
"|Zitat6",
"|Zitat7",
"|Zitat8",
"|Zitat9",
"|Zitat10",);

srand((double)microtime()*1000000);
$randval = rand(0,count($zitatarray)-1);
$entry = explode("|",$zitatarray[$randval]);
echo $entry[1];
?>


Meine Frage ist jetzt: Wie kann ich ein zufälliges Bild + eine dazugehörigen Text anzeigen lassen? Wie packe ich Bild + Text in ein Array? Also, wie kann ich die Bilder, die in einem Ordner liegen, mit zugehörigen Texten/Zitaten verknüpfen und dann nach dem Zufallsprinzip anzeigen lassen. Ich komme da gerade nicht weiter. Kann mir da einer auf die Sprünge helfen? Vielen herzlichen Dank im Voraus!!!

Ina

xlb
21.09.2006, 14:58:44
Du könntest ein "assoziatives" Array für die Zitate verwenden, mit den Bildnamen als Schlüssel :


...
$Zitat["PicX"] = "Zitat X";
$Zitat["PicY"] = "Zitat Y";
$Zitat["PicZ"] = "Zitat Z";
...


Nur mal so als Idee. Eine DB-Lösung wär'aber vielleicht besser ...?

buero_b
21.09.2006, 15:10:54
Es geht um 25 bis max. 50 Bild-Text-Kombinationen. Mein erster spontanter Gedanke war, DB ist zu langsam??? Wie ich die Verknüpfung zwischen Bild und Text hinbekomme, leuchtet mir nicht ein. Aber ich werd mal unter assoziativem Array nachlesen. Falls jemand schon einen Quellcode da hat, bin ich auch für jeden Tipp/Link dankbar.

Ina.

Opendix
21.09.2006, 15:21:05
hmm... also ich würde das mit ner DB lösen..

machste einfach ne Tabelle:

+----+---------------+-----------------+
| ID | Bild | Zitat |
+----+---------------+-----------------+
| 1 | bild1.jpg | Zitat zu Bild1 |
| 2 | bild2.jpg | Zitat zu Bild2 |
+----+---------------+-----------------+


dann musst du dich auch nicht mehr mit diesem komischen Zufallszeugs rumschlagen denn dafür gibts ja MySQL :)


$query = "SELECT bild, zitat FROM tabelle ORDER BY RAND() LIMIT 1";
$insert = mysql_query($query);
$daten = mysql_fetch_assoc($insert);

//nun hast du ein array geannt $daten

$daten['bild'] //entspricht dem Namen des zufallbildes
$daten['zitat'] //entspricth dem dazugehörigen Zitat

xlb
21.09.2006, 15:28:27
OK - wenn's um eine "statische" Menge von Bildern und Zitaten geht, wäre eine Array-Lösung wohl ausreichend.

Du ermittelst die Bildnamen (-> $bilder) doch in einer Schleife, wobei du das IMG-Zeugs nicht mit in das Array packen solltest, sondern nur den tatsächlichen Bildnamen (!!!).
Holst du dann "zufällig" einen Bildnamen (-> $bild) aus dem Array, kannst du diesen als "Schlüssel" für das entsprechende Zitat verwenden :

echo $zitatarray[$bild];

buero_b
25.09.2006, 14:12:20
Hallo,

ich bin hier immer noch nicht klar gekommen. Wie adressiere ich denn jetzt ein Bild-Text-Paar im assoziativen Array?

<?php
$arrZufall = array(
'testimonial_1.jpg'=>'Text 1 zum Bild 1.',
'testimonial_2.jpg'=>'Text 2 zum Bild 2.',
'testimonial_3.jpg'=>'Text 3 zum Bild 3.',
'testimonial_4.jpg'=>'Text 4 zum Bild 4.',
'testimonial_5.jpg'=>'Text 5 zum Bild 5.',
'testimonial_6.jpg'=>'Text 6 zum Bild 6.',
'testimonial_7.jpg'=>'Text 7 zum Bild 7.');
srand((double)microtime()*1000000);
$randval = rand(0,count($arrZufall)-1);
echo $randval;
echo $arrZufall[$randval];
?>

Nochmal vielen Dank, wenn hier einer drauf schaut und den/die Fehler sieht.
Ina.

Opendix
25.09.2006, 14:24:33
also du hast da das Array, als Schlüssel den Pfad und als Wert den Text!

$zufall = each($randval[$randval]);
echo $zufall[0]; //Schlüssel / Bildpfad ausgeben
echo $zufall[1]; //Wert / Text ausgeben


müsste eigenltich gehen :)

www.php.net/each

buero_b
25.09.2006, 16:00:27
Nein, das klappt so leider nicht. Mit each kann ich mir zwar ein Bild-Text-Paar ausgeben lassen, ich weiß aber nicht, wie ich das jetzt mit der Zufallsfunktion kombiniere???

Trotzdem danke!!! Ich bin noch am rumprobieren.

Ina.

buero_b
26.09.2006, 08:45:00
<?php
$arrZufall = array(
'<img src=testi/testimonial_1.jpg>' =>'Text 1 zum Bild 1.',
'<img src=testi/testimonial_2.jpg>' =>'Text 2 zum Bild 2.',
'<img src=testi/testimonial_3.jpg>' =>'Text 3 zum Bild 3.',
'<img src=testi/testimonial_4.jpg>' =>'Text 4 zum Bild 4.',
'<img src=testi/testimonial_5.jpg>' =>'Text 5 zum Bild 5.',
'<img src=testi/testimonial_6.jpg>' =>'Text 6 zum Bild 6.',
'<img src=testi/testimonial_7.jpg>' =>'Text 7 zum Bild 7.');
srand((double)microtime()*1000000);
$randval = rand(0,count($arrZufall)-1);
echo "Zufallszahl: ". $randval;
?>

Die Zufallszahl zwischen 0 und 6 steht in $randval.
Sie adressiert doch jetzt das Bild-Text-Paar. Wie genau geht das?
Wie gebe ich jetzt z.B. das Bild-Text-Paar bild_3 + Text 3 aus?

echo [im Array das per Zufallszahl ausgewählte Bild-Text-Paar]

Ich komme hier nicht weiter. Kann mir bitte nochmal einer auf die Sprünge helfen?

Vielen Dank! Ina.

xlb
26.09.2006, 09:54:57
Hier mal ein Beispiel :


$Images=array('testimonial_1.jpg','testimonial_3.jpg','testimonial_2.j pg');

// $Images enthält die Bilder im Verzeichnis

$Quotes=array
(
'testimonial_1.jpg'=>'bla bla',
'testimonial_2.jpg'=>'schwätz',
'testimonial_3.jpg'=>'sülz',
);

// in $Quotes werden den Bildern die Zitate zugeordnet

$QuoteX=rand(0,(count($Quotes)-1));

// Auswahl des Bildes, bzw. des entsprecheden Index in $Images

echo $Quotes[$Images[$QuoteX]];

// Ausgabe des Zitats, durch Angabe des Bildnamens

buero_b
26.09.2006, 10:28:01
Ja, das ist es!!! In ein Array die Bilder und in ein zweites (!) die Verknüpfungen. Du hast mich glaub ich gerade vor dem nahenden Wahnsinn bewahrt. ;)

Vielen Dank! Ina.