【问题标题】:Php parse multilevel - xml into arrayphp解析多级 - xml到数组
【发布时间】:2020-04-04 16:25:52
【问题描述】:

我正在尝试将 xml 转换为 php 数组,但不知何故我做错了,谁能帮帮我?

这里是 xml 格式:

<Department Id="3">
    <Week Date="23/03/2020">
        <Class DateTime="23/03/2020 18:00"/>
        <Class DateTime="23/03/2020 18:45"/>
    </Week>
    <Week Date="30/03/2020">
        <Class DateTime="30/03/2020 18:00"/>
        <Class DateTime="30/03/2020 18:45"/>
    </Week>
</Department>

输出需要这样:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [DateTime] => 23/03/2020 18:00
                )
            [1] => Array
                (
                    [DateTime] => 23/03/2020 18:45
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [DateTime] => 30/03/2020 18:00
                )
            [1] => Array
                (
                    [DateTime] => 30/03/2020 18:45
                )
        )   
)

这是我尝试过的

foreach ($xml->children() as $week) {
    foreach ($week->children() as $class) {
        $j = 0;
        foreach ($class->attributes() as $a => $b){
            $results[$i][$j][$a] = (string) $b;
        }
        $j++;
    }
    $i++;
}

我不知道我的代码有什么问题:(

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    这只是在 XML 中获取正确级别以匹配循环的情况,这会一次构建一周的数据并将其添加到整体结果中...

    $results = [];
    foreach ( $xml->Week as $week ) {
        $weekData = [];
        foreach ( $week->Class as $class )  {
            $weekData[]['DateTime'] = (string)$class['DateTime'];
        }
        $results[] = $weekData;
    }
    

    要让它加载所有属性...

    $results = [];
    foreach ( $xml->Week as $week ) {
        $weekData = [];
        foreach ( $week->Class as $class )  {
            $classData = [];
            foreach ( $class->attributes() as $name => $value )   {
                $classData[$name] = (string)$value;
            }
            $weekData[] = $classData;
        }
        $results[] = $weekData;
    }
    

    【讨论】:

    • 感谢您的回答。只是一个问题,如果我有多个属性,如 DateTime,如何动态获取它??
    • 我添加了一些更新的代码,添加了 Class 元素的所有属性。
    猜你喜欢
    • 2017-05-18
    • 2013-08-26
    • 1970-01-01
    • 2016-06-25
    • 2018-08-25
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多