读取XML时嵌套的foreach(在PHP中)

时间:2019-01-05 18:28:06

标签: php arrays json xml foreach

我需要创建一个CRON作业,每周要读取一个XML文件。 XML文件包含有关一系列电影院所有节目的信息。 我要做的是读取XML文件,提取每个演出所需的信息,然后将每个演出上传到数据库。但是,当我开始嵌套for循环时,我遇到了麻烦。 我希望每个元组都包含以下信息:

瓷砖| FilmWebNr |评分|版本|中心|屏幕|日期|时间|

XML的URL为http://217.144.251.113/static/Shows_FilmWeb.php

Here是一个粘贴框,在这里我尝试列出每个标题每个屏幕的所有日期。 Here是结果。如您所见,只有每个“标题”有多个屏幕时才显示日期。我不明白为什么属性数组并不总是可用。

我很难获得最后三个(屏幕,日期和时间)。

$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 :(得分:1)

与其去研究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/>';
            }
        }
    }
}