2016-04-29 4 views
-1

EDIT: Причина, по которой я использовал json_decode, - это получить его из XML в массив.PHP XML to Array

Так вот моя дилемма:

я получить доступ к API, который возвращает XML, я затем преобразовать его в массив следующим образом:

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

Когда у меня есть один элемент (например :) [ОДИН ЭЛЕМЕНТ XML]

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

Он получает отображается как: [ОДИН ЭЛЕМЕНТ ARRAY]

[LineItem] => Array(

    [field] => hello 

) 

теперь, если у меня есть: [MULTI ЭЛЕМЕНТ XML]

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

я получаю: [MULTI ЭЛЕМЕНТ ARRAY]

[LineItem] => Array(

     [0] => Array (

      [field] => hello 

     ) 

     [1] => Array (

      [field] => hello part 2 

     ) 

) 

мне нужен первый пример, чтобы быть в массиве, а не просто потому что дифференциация между ними просто будет слишком трудоемкой.

+2

'json_decode (json_encode (...))' Почему? – Marcus

+0

К вашему вопросу о «* слишком трудоемком *» вы могли бы просто «if (count ($ arr)> 1) {// несколько элементов} else {// single element}' – Marcus

+0

Просто проверьте, действительно ли значение массив или нет. Если это так, потяните его на части (или сделайте имплот); если это не так, возьмите значение. Преобразование XML в JSON будет только помещать вещи в массивы, когда их более одного. Если бы он делал это каждый раз, каждый отдельный элемент был бы в массиве, и это было бы еще более уродливым. –

ответ

0

Как я понимаю ваш конкретный вопрос, вы хотите, чтобы все было отформатировано подобно многоадресному массиву, даже если есть только один результат.

Я бы справился с этим, проверив массив на количество 1 после его возврата. Предположим, что у вас есть массив с именем $ xmlArray, который имеет один результат в описываемом вами формате.

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

Это преобразует $ xmlArray с одним элементом в формат многострочного массива, который вы описали в своем вопросе.

+0

Это именно то, что я хотел. Спасибо!!! – user298329

+0

Добро пожаловать. – colonelclick