dongtangxi1584 2011-10-15 15:41
浏览 45
已采纳

如何将SimpleXML对象转换为PHP数组?

Consider the following code:

$string = '<device>
    <id>1234</id>
    <label>118</label>
    <username>root</username>
    <password>helloWorld</password>
    <hardware>
        <memory>4GB RAM</memory>
        <storage_drives>
            <storage_drive_1>2TB SATA 7,200RPM</storage_drive_1>
            <storage_drive_2>1TB SATA 7,200RPM</storage_drive_2>
            <storage_drive_3>Not Applicable</storage_drive_3>
            <storage_drive_4>Not Applicable</storage_drive_4>
        </storage_drives>
    </hardware>
</device>';
$xml = new SimpleXMLElement($string);

$deviceDetails = Array();
foreach($xml as $element){
    $tag = $element->getName();
    $deviceDetails +=  Array($tag => '$element->$tag)',
        );
    }

Output $detailsDetails array is as follows:

Array
(
    [id] => $element->$tag)
    [label] => $element->$tag)
    [username] => $element->$tag)
    [password] => $element->$tag)
    [hardware] => $element->$tag)
)

which is wrong.

My question is, how to make $element->$tag work?

  • 写回答

3条回答 默认 最新

  • dtyqflrr775518 2011-10-15 16:06
    关注

    Book Of Zeus code wrapped in function to make it work recursively:

    function xml2array($xml)
    {
        $arr = array();
    
        foreach ($xml as $element)
        {
            $tag = $element->getName();
            $e = get_object_vars($element);
            if (!empty($e))
            {
                $arr[$tag] = $element instanceof SimpleXMLElement ? xml2array($element) : $e;
            }
            else
            {
                $arr[$tag] = trim($element);
            }
        }
    
        return $arr;
    }
    
    $xml = new SimpleXMLElement($string);
    print_r(xml2array($xml));
    
    Array
    (
        [id] => 1234
        [label] => 118
        [username] => root
        [password] => helloWorld
        [hardware] => Array
        (
            [memory] => 4GB RAM
            [storage_drives] => Array
            (
                [storage_drive_1] => 2TB SATA 7,200RPM
                [storage_drive_2] => 1TB SATA 7,200RPM
                [storage_drive_3] => Not Applicable
                [storage_drive_4] => Not Applicable
            )
        )
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集