2016-04-29 9 views
-1

EDIT: Der Grund, warum ich json_decode verwendet habe, ist, es von XML zu einem Array zu bekommen.PHP XML zu Array

So, hier ist mein Dilemma:

ich eine API zugreifen, die xml zurück, ich habe es dann in ein Array umwandeln wie folgt:

public function convertXMLtoJSON($xml){ 
     return json_decode(json_encode(simplexml_load_string($xml), true), true); 
} 

Wenn ich ein einzelnes Element (zum Beispiel :) [SINGLE ITEM XML]

<LineItem> 
     <field>hello</field> 
</LineItem> 

Es ist wie angezeigt wird: [SINGLE ELEMENT ARRAY]

[LineItem] => Array(

    [field] => hello 

) 

jetzt, wenn ich: [MULTI ITEM XML]

<LineItem> 
     <field>hello</field> 
</LineItem> 
<LineItem> 
     <field>hello part 2</field> 
</LineItem> 

ich: [MULTI ITEM ARRAY]

[LineItem] => Array(

     [0] => Array (

      [field] => hello 

     ) 

     [1] => Array (

      [field] => hello part 2 

     ) 

) 

ich das erste Beispiel müssen in einem Array sein, nicht nur durch weil das Unterscheiden zwischen den beiden einfach viel zu zeitaufwendig ist.

+2

'json_decode (json_encode (...))' Warum? – Marcus

+0

Auf Ihren Punkt über "* zu zeitaufwendig *" könnten Sie einfach 'if (Anzahl ($ arr)> 1) {// mehrere Elemente} else {// einzelnes Element}' – Marcus

+0

Überprüfen Sie einfach, ob der Wert ist ein Array oder nicht. Wenn es ist, zieh es auseinander (oder implode); Wenn nicht, nehmen Sie den Wert. XML zu JSON Konvertierung wird nur Dinge in Arrays setzen, wenn es mehr als eine von ihnen gibt. Wenn es jedes Mal getan würde, dann wäre jedes einzelne Element in einem Array, und das wäre noch hässlicher. –

Antwort

0

Wie ich Ihre spezifische Frage verstehe, möchten Sie alles wie das Multi-Array formatiert werden, auch wenn es nur ein einziges Ergebnis gibt.

Ich würde damit umgehen, indem Sie das Array für eine Anzahl von 1 überprüfen, nachdem es zurückgegeben wird. Nehmen wir an, Sie haben ein Array namens $ xmlArray, das ein einzelnes Ergebnis in dem von Ihnen beschriebenen Format hat.

if (count($xmlArray) == 1) { 
    $multiArray['LineItem'][] = $xmlArray['LineItem']; 
} 

Dies wird der $ xmlArray mit einem einzelnen Elemente in das Multi-Line-Array-Format konvertieren Sie in Ihrer Frage beschrieben haben.

+0

Dies ist genau das, was ich wollte. Vielen Dank!!! – user298329

+0

Gern geschehen. – colonelclick