kostenloser Webspace werbefrei: lima-city


Object-Inhalt immer als Array ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sportinfo

    sportinfo hat kostenlosen Webspace.

    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!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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....}
  4. Autor dieses Themas

    sportinfo

    sportinfo hat kostenlosen Webspace.

    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?
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!