1

xml 兄弟は日付別にリストされています。日付ごとに時間が異なるため、各日付が何度も表示される場合があります。そのような...

編集: XML を追加

<?xml version="1.0"?>
<theaterxml>
<theatreid>12345</theatreid>-
<filmtitle>
    <name>Movie Name 1</name>
    <shortname>MOVIENAME1</shortname>
    <rating>R</rating>
    <length>101</length>
    <show>
        <screen>1</screen>
        <date>02022013</date>
        <time>1205</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02022013</date>
        <time>1305</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02022013</date>
        <time>1605</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02032013</date>
        <time>1205</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02032013</date>
        <time>1305</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02032013</date>
        <time>1605</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02042013</date>
        <time>1205</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02042013</date>
        <time>1305</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02042013</date>
        <time>1605</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show> 
</filmtitle>
<filmtitle>
    <name>Movie Name 2</name>
    <shortname>MOVIENAME2</shortname>
    <rating>R</rating>
    <length>101</length>
    <show>
        <screen>1</screen>
        <date>02022013</date>
        <time>1205</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02022013</date>
        <time>1305</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02022013</date>
        <time>1605</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02032013</date>
        <time>1205</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02032013</date>
        <time>1305</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02032013</date>
        <time>1605</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02042013</date>
        <time>1205</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02042013</date>
        <time>1305</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show>
    <show>
        <screen>1</screen>
        <date>02042013</date>
        <time>1605</time>
        <salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
    </show> 
</filmtitle>

foreach を使用してメイン xml の日付の子を取得すると、最初の日付のみが取得されます。while ループを使用すると、日付がなくなるまですべての日付が表示されます。

私がする必要があるのは、各日付を 1 回表示する while ループを実行し、次に別の日付が表示されなくなるまで実行することです。次に、while ループ内で、その日付がなくなるまで毎回表示する別のループが必要です。$_GET['date'] と ?date=01022013 の URL を使用して、表示される日付と時刻を決定できるようにする必要があります。

それが理にかなっていることを願っています。これをモバイルで入力していますが、現在 PC にアクセスして実際のコードまたは xml をコピー/貼り付けすることができません。

編集済み:PCで今すぐ

それは xml の多くのようですが、それはほんの一部です。完全な xml では、8 ~ 13 本の映画が 1 日に 2 ~ 5 回、場合によっては 3 週間にわたって表示されます。毎回ロードするのは大変です。現在、私は simplexml を使用していますが、むしろ xmlreader を使用したいと考えています。

今日、xml は 97.6KB です。これは、誰かが 1 つのページに移動し、いくつかの日付のいずれかを選択してから別のページに移動するたびに大量のデータを取得するためのものです。これと画像の間で、ページがクリックされるたびに 1 つのページを表示するのに大量のデータが必要です。または変更されました。特に遅い接続、モバイルなどで。

今、私はこのプロジェクトの銃の下にいて、これをさらに学習/再学習しようとすると、さらに遅れをとってしまいます. 個人的に私はxmlを軽蔑し、社内ソフトウェアがmysqlデータベースでこれを構築することを好みますが、これは私が使用しなければならないものです. さらに、これを設計した会社は、それをより適切に構成できたはずです。

4

1 に答える 1

0

あなたはこのようなものを探していますか?

// create a DOM document and load your xml (as string)
$document = new DOMDocument();
$document->loadXML($xml);

// create a xpath selector for the document
$selector = new DOMXPath($document);

// get all show elements
$showResult = $selector->query('//show');

// dates will contain the results
$dates = array();
foreach($showResult as $show) {
    // get the date sub node 
    $dateResult = $selector->query('date', $show);
    if(count($dateResult) !== 1) {
        die('bad xml');
    }
    $date = $dateResult->item(0)->nodeValue;

    // get the time sub node 
    $timeResult = $selector->query('time', $show);
    if(count($timeResult) !== 1) {
        die('bad xml');
    }
    $time = $timeResult->item(0)->nodeValue;

    // if it is the first the time the date appears
    // we create an empty array for this index. The 
    // array will contain the timestamps
    if(!isset($dates[$date])) {
        $dates[$date] = array();
    }

    // add time to array if the same does not exists
    if(!in_array($time, $dates[$date], TRUE)) {
        $dates[$date][] = $time;
    }
}

// get all dates and times
var_dump($dates);

// get times for 02022013
var_dump($dates['02022013']);
于 2013-02-04T23:02:49.787 に答える