kostenloser Webspace werbefrei: lima-city


XML Daten in Array ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    Hallo

    wie bekomme ich XML Daten in ein Array ?

    mit SimpleXML bekomme ich zwar Objekte, aber wie diese in Array übersetzen ?

    oder wie kann ich XML gleich direkt in ein Array laden ?
    Alternative(n) zu SimpleXML ?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. osuche schrieb:
    Hallo

    wie bekomme ich XML Daten in ein Array ?

    mit SimpleXML bekomme ich zwar Objekte, aber wie diese in Array übersetzen ?

    oder wie kann ich XML gleich direkt in ein Array laden ?
    Alternative(n) zu SimpleXML ?


    Ka wo genau das Problem ist, aber aus einer xml datei nen array machen kannst du so:

    $xmlArray = (Array) simplexml_load_file($pfad);


  4. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    Danke,
    aber damit erhalte ich nur die erste Ebene als Array, was mich auch nicht wirklich weiter bringt
    die XML Daten sind mehrdimensional ... alle tiefer leigenden Elemente bleiben damit Objekte


    habe ein bischen gegoogelt und folgende 3 Varianten gefunden (Strichwort : "Objekt to Array")

    Variante 1 ... mit foreach() Schleife

    function object2array($obj) {
        $_arr = is_object($obj) ? get_object_vars($obj) : $obj;
        foreach ($_arr as $key => $val) {
            $val = (is_array($val) || is_object($val)) ? object2array($val) : $val;
            $arr[$key] = $val;
        }
        return $arr;
    }



    Variante 2 ... ohne foreach() Schleife

    ohne die Zeile: if (empty($object)) { $object = ''; }
    bekomme ich bei leeren Objekten ein leeres Array,,
    aber mit bekomme ich einen leeren Wert, gefällt mir besser

    function object2array($object) {
      if (is_object($object)) {
        $object = get_object_vars($object);
    	if (empty($object)) { $object = ''; } 
      }
      return is_array($object) ? array_map(__FUNCTION__, $object) : $object;
    }


    Variante 3 ...json_decode von json_encode

    vielleicht ein bischen komisch ....
    und hier bekomme ich bei leeren Objekten als Ergebnis wieder ein leeres Array
    was isch aber nicht haben will ...

    function object2array($object) { 
    return @json_decode(@json_encode($object),1); 
    }



    am besten gefällt (bisher) mir Variante 2

    stellt sich die Frage, welche die "beste" ist (schnellste / performateste)
    und ob es noch andere (bessere) Möglichkeiten gibt



    Beitrag zuletzt geändert: 10.11.2011 15:23:06 von osuche
  5. osuche schrieb:
    Danke,
    aber damit erhalte ich nur die erste Ebene als Array, was mich auch nicht wirklich weiter bringt
    die XML Daten sind mehrdimensional ... alle tiefer leigenden Elemente bleiben damit Objekte

    Variante 2 ... ohne foreach() Schleife

    ohne die Zeile: if (empty($object)) { $object = ''; }
    bekomme ich bei leeren Objekten ein leeres Array,,
    aber mit bekomme ich einen leeren Wert, gefällt mir besser

    function object2array($object) {
      if (is_object($object)) {
        $object = get_object_vars($object);
    	if (empty($object)) { $object = ''; } 
      }
      return is_array($object) ? array_map(__FUNCTION__, $object) : $object;
    }


    am besten gefällt (bisher) mir Variante 2

    stellt sich die Frage, welche die "beste" ist (schnellste / performateste)
    und ob es noch andere (bessere) Möglichkeiten gibt



    Ich denke diese Variante (2) wird performance mäßig kaum einen Unterschied machen, ist aber am besten proggt ;D :love:
  6. Hallo,

    solltest du bei Variante 2 das if nicht umtauschen?

    function object2array($object) {
      ...
      return is_array($object) ? $object : array_map(__FUNCTION__, $object);
    }


    lg
  7. philippkern schrieb:
    Hallo,

    solltest du bei Variante 2 das if nicht umtauschen?

    function object2array($object) {
      ...
      return is_array($object) ? $object : array_map(__FUNCTION__, $object);
    }


    lg



    function zu Array($ xml Objekt) {
      Wenn (folgendes wirklich ein Objekt ist:($xml Objekt)) {
        $xml Objekt =ist gleich= Vorgabeeigenschaften der klasse($xml Objekt);
    	Wenn (folgendes leer($xml Objekt)) { $xml Objekt = 'schreibe leere zeile'; } 
      }
     sonst ist parameter von folgendes der Rückgabewert ist_ein_array($xml Objekt) ? array mit den folgenden Elementen zurückgeben(__Die Funktion und__, $xml objekt) entspricht dem $xml Objekt;
    }


    Pseudo Code ist zwar nicht mein Ding, aber ich hab versucht es mal verständlich darzustellen.. Demnach ist das so schon richtig ^^
  8. Stimmt schon. Dankeschön.

    Hab nicht dran gedacht das ja get_object_vars ein Array zurückgibt bzw darin auch wieder Objects sein können ... :S

    Beitrag zuletzt geändert: 11.11.2011 9:21:43 von philippkern
  9. function xmlObject2Array($knoten){ 
        $xmlArray = array(); 
        if(is_object($knoten)){ 
            settype($knoten,'array') ; 
        } 
        foreach ($knoten as $key=>$value){ 
            if(is_array($value)||is_object($value)){ 
                $xmlArray[$key] = xmlObject2Array($value); 
            }else{ 
                $xmlArray[$key] = $value; 
            } 
        } 
        return $xmlArray; 
    } 
    
    #XML liegt als String vor  
    $xmlObject = simplexml_load_string($xmlString);  
    
    #oder aus einer Datei laden  
    $xmlObject = simplexml_load_file($pfad);  
    
    $xmlArray = xmlObject2Array($xmlObject);
  10. 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!