Как зациклить и отобразить (n) каналы, используя simpleXML и position()

Я использую simpleXML и хочу зациклить, хотя канал отображает только 5 шоу с использованием метода position(), но не радует, что он заработает

foreach($xml->sortedXPath('TV[position() < 5 and ProgrammeName="MTV"]', 'TransmissionDate', SORT_DESC) as $i => $item)
{

    print "<a href='?v=".$item->ID."&a=false' class='link'>\n";
    print "\t<span class=\"text\">" .trunc($item->ShortSynopsis,25, " "). "</span>\n";
    print "\t</a>";
}

любые предложения о том, как я могу заставить это работать

это данные XML, с которыми я работаю

http://deniselashlley.co.uk/test/data.xml

2 ответа

Рассматривали ли вы, что ваш цикл начнется в item[0]? Так $i > 5 выведет первые 6 узлов, потому что отсчет начнется с пункта 0. Просто измените его на $i > 4 и это должно решить вашу проблему.

Это похоже на репост, но в любом случае...

NiseNise хочет отсортировать узлы, а затем оставить топ-5. Проблема в том, что это выражение XPath выбирает первые 5 узлов в документе, а затем метод сортирует их. Вам нужно отсортировать все узлы, а затем обработать только первые 5.

foreach($xml->sortedXPath('TV[ProgrammeName="MTV"]', 'TransmissionDate', SORT_DESC) as $i => $item)
{
    if ($i > 5)
    {
        break;
    }

    print "<a href='?v=".$item->ID."&a=false' class='link'>\n";
    // etc...
}

Я забыл упомянуть, sortedXPath() не является частью SimpleXML, это часть библиотеки, расширяющей SimpleXML, следовательно, повторная маркировка.

Другие вопросы по тегам