Как зациклить и отобразить (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, с которыми я работаю
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, следовательно, повторная маркировка.