2015-08-07 2 views
1

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

$myArray = array(
    "<?xml version='1.0' encoding='UTF-8'?>", 
    "<invoices>", 
    " <invoice>", 
    " <name>Odin</name>", 
    " <zip>0000</zip>", 
    " <city>Asgard</city>", 
    " <lines>", 
    "  <line>", 
    "  <itemNo>1</itemNo>", 
    "  <qty>1.00</qty>", 
    "  <prodCode>usb01T</prodCode>", 
    "  <desc>USB 1TB</desc>", 
    "  <unitPrice>1000.00</unitPrice>", 
    "  <tax>25</tax>", 
    "  <lineTaxAmount>250.00</lineTaxAmount>", 
    "  <lineTotal>1250.00</lineTotal>", 
    "  </line>", 
    " </lines>", 
    " <optional>", 
    "  <invoiceType>ordinary</invoiceType>", 
    "  <invoiceNo>9</invoiceNo>", 
    "  <orderNo>119</orderNo>", 
    "  <invoiceDate>07.08.15</invoiceDate>", 
    "  <dueDate>21.08.15</dueDate>", 
    "  <orderDate>07.08.15</orderDate>", 
    "  <state>sent</state>", 
    "  <recipientNo>119</recipientNo>", 
    "  <address1>Valhalla</address1>", 
    "  <country>NORGE</country>", 
    "  <email>[email protected]vallhalla.com</email>", 
    "  <phone>000000</phone>", 
    "  <yourRef>Asgard</yourRef>", 
    "  <tax>250.00</tax>", 
    "  <total>1250.00</total>", 
    "  <accountNo>97101013352</accountNo>", 
    "  <orgNo>0000000</orgNo>", 
    "  <dunningFee>65.00</dunningFee>", 
    "  <interestRate>9.00</interestRate>", 
    " </optional>", 
    " </invoice>","</invoices>" 
); 

Я хочу, чтобы преобразовать этот массив в ассоциативный массив, так он будет выглядеть следующим образом:

$myArray = array(
      'invoices' => array(
        'invoice' => array(
         'name' => 'Odin', 
         'zip' => '0000', 
      ..... 
) 

Я попытался json_decode (json_encode ($ MyArray), правда), но это не удается. Есть ли способ сделать это?

+0

Google: 'PHP SimpleXMLElement' <- Это должно быть хорошим началом. – Rizier123

+0

http://stackoverflow.com/questions/6578832/how-to-convert-xml-into-array-in-php –

ответ

1

Ваша проблема в том, что ваш массив - это просто массив строк, а не правильный XML-массив, поэтому ваши проблемы анализируются.

Чтобы решить эту проблему, просто сцепить $myArray и разобрать его, как XML, прежде чем запустить его через JSON кодирования:

$myArray = implode($myArray); 
$xml = new SimpleXMLElement($myArray); 
$myArray = json_decode(json_encode($xml), true)); 

Удачи!