Php разбор многоуровневого - xml в массив - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь преобразовать 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++;
}

Я не знаю, что не так в моем коде: (

1 Ответ

1 голос
/ 04 апреля 2020

Это просто случай получения правильных уровней в 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;
}
...