【问题标题】:Convert multi-dimensional multi-object array to standard multi-dimensional array in PHP将多维多对象数组转换为PHP中的标准多维数组
【发布时间】:2009-11-27 05:24:39
【问题描述】:

我有一个来自simplexml_import_dom() 函数调用的多维多对象数组。

数组的一部分:

[Price] => SimpleXMLElement Object
(
    [Prices] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [MType] => A
                            [PType] => R

这在尝试读取嵌套对象时给我带来了很多问题。我尝试使用多个 get_object_vars() 遍历数组,但由于嵌套对象的深度和位置不断变化,我无法产生理想的结果。

PHP 是否包含我无法找到的将多维多对象数组转换为标准多维数组的函数?或者以前有人解决过这个问题吗?

感谢您的帮助!

【问题讨论】:

  • 也许你有一些具体的事情需要完成?这似乎不是要解决的“问题”,而是要发现的秘诀。

标签: php simplexml


【解决方案1】:

这个问题经常被问到,但是在将 XML 树转换为数组时,必须根据具体情况逐个解决一个基本问题,这使得一刀切的方法变得不可能:如何你会区分节点和属性吗?

例如,如何将此 XML 转换为数组:

<node val="attr"><val>child</val></node>

另外,一个节点可以有任意数量的同名子节点,这是关联数组无法模拟的。

长话短说,您必须自己制定解决方案。从您的输出来看,它看起来像这样:

$arr = array();
foreach ($Price->Prices as $Prices)
{
    $tmp = array();

    foreach ($Prices->attributes() as $k => $v)
    {
        $tmp[$k] = (string) $v;
    }

    $arr[] = $tmp;
}

如果不是您要查找的内容,请编辑您的问题并添加源文档 (XML) 的示例以及预期结果(数组)。

【讨论】:

    【解决方案2】:

    您是否知道这些对象具有您可以使用的functions?请尝试以下操作:

    foreach ($simpleXmlObject->children() as $element) {
        echo $element->getName();
    }
    

    【讨论】:

    • 出于某种原因,我从未想过要尝试。我会试一试并发布我的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2016-11-28
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多