簡體   English   中英

PHP 使用遞歸方法從 xml 創建數組

[英]PHP create array from xml with recursive method

需要實現一個遞歸 function 也可以接受第二個子節點,我試圖循環第二個 foreach 但我無法實現。 也許我錯過了一些東西,想知道是否有人通過這個:

代碼是:

function runXml() {

        $content1 = <<< XML
<data>
    <users>
        <user>
            <name>myName</name>
            <email>myEmail</email>
            <address>MyAddres - City - Country</address>
        </user>
        <user>
            <name>myName2</name>
            <email>myEmail2</email>
            <address>MyAddres2 - City - Country</address>
        </user>
    </users>
</data>
XML;

        $content2 = <<< XML
    <users>
        <user>
            <name>myName</name>
            <email>myEmail</email>
            <address>MyAddres - City - Country</address>
        </user>
        <user>
            <name>myName2</name>
            <email>myEmail2</email>
            <address>MyAddres2 - City - Country</address>
        </user>
    </users>
XML;

        echo '<pre>';
        $xml1 = simplexml_load_string($content1);
        print_r($this->processFeedXmlWithoutAttributes($xml1));

        $xml2 = simplexml_load_string($content2);
        print_r($this->processFeedXmlWithoutAttributes($xml2));

    }

    function processFeedXmlWithoutAttributes($xml)
    {
        $output = array();
        try {
            if($xml->children()) {
                $children = $xml->children();
                if(count($children) > 0) {
                    foreach($children as $child) {
                        $output[] = $child;
                    }
                }
            }
        } catch (Exception $e) {
        }
        return $output;
    }

結果是:

    Array
(
    [0] => SimpleXMLElement Object
        (
            [user] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [name] => myName
                            [email] => myEmail
                            [address] => MyAddres - City - Country
                        )

                    [1] => SimpleXMLElement Object
                        (
                            [name] => myName2
                            [email] => myEmail2
                            [address] => MyAddres2 - City - Country
                        )

                )

        )

)
Array
(
    [0] => SimpleXMLElement Object
        (
            [name] => myName
            [email] => myEmail
            [address] => MyAddres - City - Country
        )

    [1] => SimpleXMLElement Object
        (
            [name] => myName2
            [email] => myEmail2
            [address] => MyAddres2 - City - Country
        )

)

所需的結果是 xml 的兩種結構:

Array
(
    [0] => SimpleXMLElement Object
        (
            [name] => myName
            [email] => myEmail
            [address] => MyAddres - City - Country
        )

    [1] => SimpleXMLElement Object
        (
            [name] => myName2
            [email] => myEmail2
            [address] => MyAddres2 - City - Country
        )

)

對於我有“”用戶索引的第一個結構被添加並創建了一個多維數組,我們的想法是擺脫該索引並讓數組稍后迭代。

任何幫助表示贊賞!

問題在於user節點在這兩種情況下都應該是根。

為了實現它 - 您可以從此節點開始解析 XML。 processFeedXmlWithoutAttributes方法的可能解決方案:

    function processFeedXmlWithoutAttributes(\SimpleXMLElement $xml): array
    {
        $output = [];
        try {
            while ($xml->getName() !== 'user') {
                $xml = $xml->children();
            }
            foreach ($xml as $child) {
                $output[] = $child;
            }
        } catch (Exception $e) {
        }

        return $output;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM