Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用simpleXML将树解析为嵌套数组?_Php_Arrays_Parsing_Xml Parsing_Simplexml - Fatal编程技术网

Php 如何使用simpleXML将树解析为嵌套数组?

Php 如何使用simpleXML将树解析为嵌套数组?,php,arrays,parsing,xml-parsing,simplexml,Php,Arrays,Parsing,Xml Parsing,Simplexml,我正在编写一个PHP脚本,该脚本从第三方API(订单管理系统)请求xml数据:客户订单,由于主API调用不能正常工作(而且他们也不打算修复),因此我获得所需数据的唯一方法是使用一个调用,该调用将其作为jstree返回(html:ul LIA)格式如下: <ul> <li> <a>Order</a> <ul> <li> <a>Id</a&

我正在编写一个PHP脚本,该脚本从第三方API(订单管理系统)请求xml数据:客户订单,由于主API调用不能正常工作(而且他们也不打算修复),因此我获得所需数据的唯一方法是使用一个调用,该调用将其作为jstree返回(html:ul LIA)格式如下:

<ul>
   <li>
      <a>Order</a>
      <ul>
         <li>
            <a>Id</a>
            <ul>
               <li>13390</li>
            </ul>
         </li>
         <li>
            <a>OrderNumber</a>
            <ul>
               <li>13390</li>
            </ul>
         </li>
<li>
            <a>LineItems</a>
            <ul>
               <li>
                  <a>LineItem</a>
                  <ul>
                     <li>
                        <a>Id</a>
                        <ul>
                           <li>21598</li>
                        </ul>
                     </li>
                     <li>
                        <a>Subtotal</a>
                        <ul>
                           <li>45.79</li>
                        </ul>
                     </li>
                     <li>
                        <a>SubtotalTax</a>
                        <ul>
                           <li>9.16</li>
                        </ul>
                     </li>
                     <li>
                        <a>Total</a>
                        <ul>
                           <li>45.79</li>
                        </ul>
                     </li>
                     <li>
                        <a>TotalTax</a>
                        <ul>
                           <li>9.16</li>
                        </ul>
                     </li>
                     <li>
                        <a>Price</a>
                        <ul>
                           <li>45.79</li>
                        </ul>
                     </li>
                     <li>
                        <a>Quantity</a>
                        <ul>
                           <li>1</li>
                        </ul>
                     </li>
                     <li><a>TaxClass</a></li>
                     <li>
                        <a>Name</a>
                        <ul>
                           <li>Product Name</li>
                        </ul>
                     </li>
                     <li>
                        <a>ProductId</a>
                        <ul>
                           <li>4208</li>
                        </ul>
                     </li>
                     <li>
                        <a>Sku</a>
                        <ul>
                           <li>ABCD-S</li>
                        </ul>
                     </li>
                     <li><a>Meta</a></li>
                  </ul>
               </li>
            </ul>
         </li>
      </ul>
   </li>
</ul>
但它输出的数组如下所示:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 13390
                )

            [1] => Array
                (
                    [0] => 13390
                )
            [2] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 21598
                                )

                            [1] => Array
                                (
                                    [0] => 45.79
                                )

                            [2] => Array
                                (
                                    [0] => 9.16
                                )

                            [3] => Array
                                (
                                    [0] => 45.79
                                )

                            [4] => Array
                                (
                                    [0] => 9.16
                                )

                            [5] => Array
                                (
                                    [0] => 45.79
                                )

                            [6] => Array
                                (
                                    [0] => 1
                                )

                            [7] => 
                            [8] => Array
                                (
                                    [0] => Product Name
                                )

                            [9] => Array
                                (
                                    [0] => 4208
                                )

                            [10] => Array
                                (
                                    [0] => ABCD-S
                                )

                            [11] => 
                        )

                )
Array
(
    ["Order"] => Array
        (
            ["Id"] => 13390

            ["OrderNumber"] => 13390

            ["LineItems"] => Array
                (
                    [0] => Array
                        (
                            ["Id"] => 21598

                            ["Subtotal"] => 45.79

                            ["SubtotalTax"] =>  9.16

                            ["Total"] => 45.79

                            ["TotalTax"] => 9.16

                            ["Price"] => 45.79

                            ["Quantity"] => 1

                            ["TaxClass"] => 
                            ["Name"] => Product Name

                            ["ProductId"] => 4208

                            ["Sku"] => ABCD-S

                            ["Meta"] => 
                        )

                )

        )
)
我期望的结果是数组的外观如下所示:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 13390
                )

            [1] => Array
                (
                    [0] => 13390
                )
            [2] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 21598
                                )

                            [1] => Array
                                (
                                    [0] => 45.79
                                )

                            [2] => Array
                                (
                                    [0] => 9.16
                                )

                            [3] => Array
                                (
                                    [0] => 45.79
                                )

                            [4] => Array
                                (
                                    [0] => 9.16
                                )

                            [5] => Array
                                (
                                    [0] => 45.79
                                )

                            [6] => Array
                                (
                                    [0] => 1
                                )

                            [7] => 
                            [8] => Array
                                (
                                    [0] => Product Name
                                )

                            [9] => Array
                                (
                                    [0] => 4208
                                )

                            [10] => Array
                                (
                                    [0] => ABCD-S
                                )

                            [11] => 
                        )

                )
Array
(
    ["Order"] => Array
        (
            ["Id"] => 13390

            ["OrderNumber"] => 13390

            ["LineItems"] => Array
                (
                    [0] => Array
                        (
                            ["Id"] => 21598

                            ["Subtotal"] => 45.79

                            ["SubtotalTax"] =>  9.16

                            ["Total"] => 45.79

                            ["TotalTax"] => 9.16

                            ["Price"] => 45.79

                            ["Quantity"] => 1

                            ["TaxClass"] => 
                            ["Name"] => Product Name

                            ["ProductId"] => 4208

                            ["Sku"] => ABCD-S

                            ["Meta"] => 
                        )

                )

        )
)
当$li->a不是空的,但我只是以错误和空数组结束时,我尝试将
$output[]=
替换为
$output[$li->a]=

任何帮助都将不胜感激


谢谢,

这里的主要变化只是处理XML的循环

    foreach ($ul->li as $li) {
        $newLayer = (isset($li->ul)) ? ul_to_array($li->ul) : trim((string) $li);
        $output[ (string)$li->a ] = $newLayer[''] ?? $newLayer;
    }
(string)$li->a
部分使用锚定标记中的值作为数组的索引

$newLayer[“”]$newLayer
处理存储实际值的实例,因此值位于元素
''
中,如果未设置此元素,则它将是一个子菜单

根据您的示例,这将给出

Array
(
    [Order] => Array
        (
            [Id] => 13390
            [OrderNumber] => 13390
            [LineItems] => Array
                (
                    [LineItem] => Array
                        (
                            [Id] => 21598
                            [Subtotal] => 45.79
                            [SubtotalTax] => 9.16
                            [Total] => 45.79
                            [TotalTax] => 9.16
                            [Price] => 45.79
                            [Quantity] => 1
                            [TaxClass] => 
                            [Name] => Product Name
                            [ProductId] => 4208
                            [Sku] => ABCD-S
                            [Meta] => 
                        )

                )

        )

)

太好了,非常感谢奈杰尔。完全符合我的要求。