Вложенный foreach при чтении XML (в PHP) - PullRequest
0 голосов
/ 05 января 2019

Мне нужно создать задание CRON, которое будет еженедельно читать файл XML. Файл XML содержит информацию обо всех шоу в разных кинотеатрах. Что я хочу сделать, так это прочитать файл XML, извлечь необходимую мне информацию о каждом шоу, а затем загрузить каждое шоу в базу данных. Но у меня возникают проблемы, когда я начинаю вкладывать циклы for. Я хочу, чтобы каждый кортеж содержал следующую информацию:

Плитка | FilmWebNr | Рейтинг | Версия | Центр | Экран | Дата | Время |

URL для XML: http://217.144.251.113/static/Shows_FilmWeb.php

Здесь - это вставка, в которой я пытаюсь перечислить все даты для каждого экрана для каждого заголовка. Здесь - результат. Как вы можете видеть, даты отображаются только в том случае, если на заголовок более одного экрана. Я не понимаю, почему массив атрибутов не всегда доступен.

Я борюсь с получением последних трех (экран, дата и время).

$map_url = "http://217.144.251.113/static/Shows_FilmWeb.php";

$response_xml_data = file_get_contents($map_url);
$data = simplexml_load_string($response_xml_data);
$array = (array) simplexml_load_string($response_xml_data);
$json  = json_encode($array);
$configData = json_decode($json, true);
$movies = $configData['Performances']['Title'];

foreach ($movies as $title) {
    echo "Title: " . $title['@attributes']['Name'] . '<br/>';
    echo "FilmWebNr: " . $title['FilmWebNum'] . '<br/>';
    echo "Rating: " . $title['TitleRating']  . '<br/>';
    echo "Version: " . $title['TitleVersion']  . '<br/>';
    echo "Center: " . $title['Center']['@attributes']['Name']  . '<br/>';
    foreach ($title['Center']['Screen'] as $screen) {
        //here I run into trouble
      }
}

Допустим, я пытаюсь добавить следующее во внутренний цикл:

$screen['@attributes']['Name'];

Я получаю сообщение об ошибке "Неопределенный индекс: @attributes". Так что иногда атрибуты кажутся массивом, а иногда нет. Хотя это всегда часть XML.

1 Ответ

0 голосов
/ 06 января 2019

Вместо того чтобы переходить от XML-JSON-Arrays, может быть, лучше узнать, как работать с SimpleXML, и вы обнаружите, что это довольно просто.

Главное - привыкнуть к тому, как различные элементы наслоены, и использовать циклы foreach для перебора блоков ...

$map_url = "http://217.144.251.113/static/Shows_FilmWeb.php";

$response_xml_data = file_get_contents($map_url);
$data = simplexml_load_string($response_xml_data);
$movies = $data->Performances->Title;

foreach ($movies as $title) {
    echo "Title: " . $title['Name'] . '<br/>';
    echo "FilmWebNr: " . $title->FilmWebNum . '<br/>';
    echo "Rating: " . $title->TitleRating  . '<br/>';
    echo "Version: " . $title->TitleVersion  . '<br/>';
    echo "Center: " . $title->Center['Name']  . '<br/>';
    foreach ($title->Center->Screen as $screen) {
        echo "screen:".$screen['Name']. '<br/>';
        foreach ( $screen->Date as $date )  {
            echo "Date:".$date['Name']. '<br/>';
            foreach ( $date->ShowID as $showID )  {
                echo "Time:".$showID->Time. '<br/>';
            }
        }
    }
}
...