XML Daten in Array ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
bleiben
code
dank
datei
datum
element
folgenden elementen
frage
knoten
laden
leere zeile
leeren objekten
leeres array
objekt
pfad
problem
schleife
url
zeile
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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);
-
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 -
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 -
Hallo,
solltest du bei Variante 2 das if nicht umtauschen?
function object2array($object) { ... return is_array($object) ? $object : array_map(__FUNCTION__, $object); }
lg -
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 ^^ -
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 -
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);
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage