Object-Inhalt immer als Array ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alt bild
array
ausgabe
ausgeben
behandeln
bild
code
dank
datum
direkt ausgeben
einzelnen element
einziges bild
funktioniert daten
info
not
schleife
struktur
text
typ
url
-
Hallo
ich habe ein Array, das Objekte enthält
aber in den Daten sind bestimmte Felder manchmal (object) und manchmal (array of objects)
wie kann ich die Daten so durchgehen,
damit jeweils das Feld bilder->img immer als Array behandelt wird ?
... auch wenn es nur ein Bild enthält (kein Array ist, sondern direkt das Object)
Beispiel: $daten
=> Array ( [0] => stdClass Object ( [title] => Name1 [bilder] => stdClass Object ( [img] => stdClass Object ( [url] => bild1a.jpg [alt] => Bild 1A ) ) [info] => Text blabla ) [1] => stdClass Object ( [title] => Name2 [bilder] => stdClass Object ( [img] => Array ( [0] => stdClass Object ( [url] => bild2a.jpg [alt] => Bild 2A ) [1] => stdClass Object ( [url] => bild2b.jpg [alt] => Bild 2B ) ) ) [info] => Text blabla ) [2] => stdClass Object ( [title] => Name3 [bilder] => stdClass Object ( [img] => stdClass Object ( [url] => bild3a.jpg [alt] => Bild 3A ) ) [info] => Text blabla ) )
mein Versuch bisher ist es, in einer Schleife
... wenn es kein Array ist dann zu Array machen
// ------------ Daten Ausgabe ------ $n=1; foreach($daten as $item) { echo "<br />Nr: ".$n."\n"; if (!is_array($item->bilder->img)) { $item->bilder->img = array($item->bilder->img); } // ------------ Ausgabe [img] Array ------ echo "<br />Bilder: \n"; $i=1; foreach($item->bilder->img as $imgitem) { echo "<br />".$i." --- ".$imgitem->url." ---".$imgitem->alt."\n"; $i++; } // ------------ echo "<br />\n"; $n++; } // ------------------------------
bei stdClass Object funktioniert das, aber NICHT bei SimpleXMLElement Object
also wenn die Daten aus simplexml_load_..... kommen, dann nicht ?!
dann kommt bei dieser if-Zeile die Meldung:
Warning: It is not yet possible to assign complex types to properties ...
Struktur ist die gleiche, nur der Object-Typ nicht, und das gibt den Fehler? ... höääää?
warum?
... wie aus simplexml_load_... die Daten in $item->bilder->img immer als Array behandeln ?
so, dass man immer die Ausgabe der Bilder in einer foreach() Schleife machen kann
auch wenn nur ein einziges Bild im Datensatz ist (direkt als Onject, nicht als Array of Objects)
Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich wäre jetzt spontan den anderen Weg gegangen:
Wenn es kein Array ist -> direkt ausgeben wie du das halt machen würdest mit einem einzelnen Element
sonst:
per foreach ausgeben
// ------------ Daten Ausgabe ------ $n=1; foreach($daten as $item) { echo "<br />Nr: ".$n."\n"; if (!is_array($item->bilder->img)) { echo "<br />".$i." --- ". $item->bilder->img->url." ---". $item->bilder->img->alt."\n"; } else { // ------------ Ausgabe [img] Array ------ echo "<br />Bilder: \n"; $i=1; foreach($item->bilder->img as $imgitem) { echo "<br />".$i." --- ".$imgitem->url." ---".$imgitem->alt."\n"; $i++; } // ------------ } echo "<br />\n"; $n++; } // ------------------------------
bzw schöne finde ich persönlich es umgekehrt mit if (is_array... ) { foreach....} -
Danke,
stimmt, ich muss es ja garnicht immer in Array umwandeln,
kann es ja auch ohne foreach ausgeben, wenn es kein Array ist
... ich dachte halt, es wäre schöner mit einheitlichen Daten-Struktur zu arbeiten
auch für den Fall, die Ausgabe in eine andere Funktion auszulagern
und ich glaube eine wichtige (verwirrende) Frage ist etwas untergegangen
bei einem "stdClass Object" funktioniert es (zu Array machen wenn nicht)
warum funktioniert es dann nicht bei einem "SimpleXMLElement Object" ???
Daten als JSON ---> json_decode() ---> stdClass Object ----> Object zu Array machen funktioniert
Daten als XML ---> simplexml_load_string() ---> SimpleXMLElement Object ----> funktioniert nicht
??? Logik? Gründe?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage