Rolf B: Frage zu einem PHP script

Beitrag lesen

Hallo Tassilo,

genau, du brauchst den Bildnamen, und der ist anderswo gespeichert.

Wie Du siehst, enthält $img ein Array mit zwei Einträgen: path und size. Das stammt aus dem ImagesController, da steht:

$this->Images[pathinfo($img, PATHINFO_BASENAME)] = [ 'path' => $img, 'size' => $this->CalculateSizes(...) ].

Der Bildname landet im Schlüssel des Arrays, wo er für array_map unerreichbar ist.

Im jetztigen Hauptprogramm versuchst Du den Zugriff $jObject -> {$img} (was auch ohne die geschweiften Klammern funktionieren täte). Weißt Du, was dieser Ausdruck bedeutet? Nimm den Inhalt der Variablen $img und suche in $jObject eine Eigenschaft dieses Namens. Aber ein Array als Eigenschaftsname? Was passiert damit? Lauschen wir mal, wie PHP vor sich hin brabbelt. „Ok, ich soll in $jObject eine Eigenschaft suchen. Mit dem Namen... hä? Ein Dings, ein äh... jedenfalls kein String. Namen sind doch Strings! Hey Dings, ich brauche Dich als String.“ „Ok,“ sagt das Array, „bitte schön: "Array".“ „Danke,“ sagt PHP, und schaut sich nach $jObject->Array um. „Oh, diese Eigenschaft gibt's gar nicht. Na gut. Vielleicht später. Hier, Programmierer, dein Wert: NULL.“

Kein Scherz. Die String-Darstellung eines beliebigen Arrays ist "Array".

echo ARRAY(1,2,3);
// Ausgabe: Array

Mit error_reporting(E_ALL) hätte es fleißig Warnmeldungen gegeben.

Du brauchst den Dateinamen, ohne Pfad, weil deine JSON-Datei so aufgebaut ist. Du könntest ihn nun im Hauptprogramm wieder mit pathinfo($img['path'], PATHINFO_BASENAME) wieder heraussuchen - aber das wäre doppelte Arbeit. Du hast den BASENAME ja schon, als Schlüssel für den Array-Eintrag in $aImages. Das sieht man oben in dem Auszug aus ImagesController.

Das Problem ist jetzt, dass array_map() Dir den Schlüssel nicht liefert. Nur die Werte.

Achso, wenn ich deinen array_map so betrachte - du holst Dir das figure-Template mit use($_FiguresHml) in die verfügbaren Daten der Callback-Funktion hinein. Das müsstest Du auch mit $jObject tun, sonst ist $jObject in der Callback-Funktion NULL.

Die elegantere Lösung ist darum hier: foreach ($aImages as $basename => $img) statt array_map, damit bekommst Du Eintrag für Eintrag Schlüssel und Wert, und kannst $basename als Schlüssel für $jObject verwenden.

Rolf

--
sumpsi - posui - clusi