PHP Textdatei einlesen + Mehrdimensionales Array ausgeben

Dr. Wuah

Lt. Commander
Registriert
Mai 2005
Beiträge
1.277
Hallo zusammen,

auch wenn das wahrscheinlich in php gar nicht so schwer ist, bekomme ich es leider nicht hin. Hintergrund: Ich entwerfe gerade mit dem JQuery Plugin Supersized eine Vollbildslidshow. Für jedes Bild, das in dieser Show angezeigt werden soll wird eine Zeile nach dem Folgenden Schema benötigt:

{image : 'Bildpfad', title : 'Beschreibung', thumb : 'Thumbpfad'},

Um das ganze zu automatisieren, habe ich ein Snippet von hier benutzt, um gleich einen ganzen Ordner einzulesen. Ich will jetzt zusätzlich noch für jedes Bild eine Beschreibung ausgeben. Dazu habe ich eine Datei _desc.txt erstellt, die in jeder Zeile für jedes Bild eine kurze Beschreibung enthält. Jetzt würde ich das ganze gerne noch ausgeben und habe es folgendermaßen probiert:

PHP:
<?php //path to directory to scan
$directory = "galerie1/";  //get all image files
$directory_thumbs = "galerie1/thumbs/";  	 //thumnbails directory
$images = glob($directory . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE); //print each file name
$images_thumb = glob($directory_thumbs . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE);
$desclist=file("galerie1/_desc.txt"); 
$images_final = array_combine($images,$images_thumb,$desclist);
foreach($images_final as $image => $thumbs)
 {
    echo "{image : ' $image ', ";	
    foreach ($thumbs as $thumb => $desc)
    {
         echo "title : ' $desc ' , thumb : ' $thumb ' },";
    }
}
?>

Leider lädt die Seite nicht - ganz offensichtlich klappt das mit dem Foreach doch nicht so ganz. Sieht jemand den Fehler und kann mir helfen?
 
Zuletzt bearbeitet:
1. array_combine() kann nur mit 2 arguments umgehen http://www.php.net/manual/de/function.array-combine.php

2. Hätte das ganze funktioniert wie es soll, würde 1 foreach ausreichen.


Probier mal folgendes:

Code:
<?php //path to directory to scan
    $directory = "galerie1/"; //get all image files
    $directory_thumbs = "galerie1/thumbs/"; //thumnbails directory
    $images = glob($directory . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE); //print each file name
    $images_thumb = glob($directory_thumbs . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE);
    $desclist=file("galerie1/_desc.txt");
    
    foreach($images as $key => $image) {
            echo "{image : '".$image."', 'title : '".$desclist[$key]."' , thumb : '".$images_thumb[$key]."' }";
    }
?>
 
Danke für deine Antwort!

Dein Code funktioniert leider nicht. Nur für mein (php mäßig nicht ausgeprägtes) Verständnis: müsste man bei dir nicht noch irgendwo die einzelnen Arrays zusammenfassen in ein "gemeinsames" Array?
 
Dr. Wuah schrieb:
müsste man bei dir nicht noch irgendwo die einzelnen Arrays zusammenfassen in ein "gemeinsames" Array?
Müssen? Nein.

Liefern die glob-Funktionen bei dir überhaupt ein Ergebnis zurück?
 
Debugging hilft da weiter, auch wenn es nur per dump + die geschieht.
 
Ok, das ist natürlich eine gute Idee. Allerdings sieht das an sich ganz ok aus, die Arrays werden alle entsprechend gefüllt:

$images
array(4) {
[0]=>
string(14) "galerie1/1.jpg"
[1]=>
string(14) "galerie1/3.JPG"
[2]=>
string(14) "galerie1/4.JPG"
[3]=>
string(14) "galerie1/5.JPG"
}

$images_thumb
array(4) {
[0]=>
string(21) "galerie1/thumbs/1.jpg"
[1]=>
string(21) "galerie1/thumbs/3.JPG"
[2]=>
string(21) "galerie1/thumbs/4.JPG"
[3]=>
string(21) "galerie1/thumbs/5.JPG"
}

$desclist
array(4) {
[0]=>
string(14) "Beschreibung 1"
[1]=>
string(14) "Beschreibung 2"
[2]=>
string(14) "Beschreibung 3"
[3]=>
string(14) "Beschreibung 4"
}

---

Fehler gefunden, am Ende hat ein Komma gefehlt. Damit funktioniert also der ursprüngliche Code von BiGTAiNMENT wie er soll. Danke euch allen :)
 
Zuletzt bearbeitet: (Gelöst!)
Zurück
Oben