@CMETAHAA

Как вывести дополнительные поля из XML?

Набросал скрипт, скрипт работает нормально, но нужно вывести еще поля 2 поля следующие.
Есть файл XML TV программа на неделю, он выводит только одну строчку по конкретному каналу, а нужно вывести что дальше будет 2 ~3 передачи что будет идти далее.
XML-TV выглядит вот так.
<programme start="20160312041000" stop="20160312042000" channel="2">
    <title lang="ru">Местное время. Вести-Москва</title>
    <desc lang="ru">Произведено: Россия. Самая свежая и объективная информация обо всех гранях жизни столицы и области.</desc>
    <category lang="ru">Новости</category>
    <credits>
      <director>Екатерина Григорова</director>
      <actor>Екатерина Коновалова</actor>
      <actor>Олег Тонконог</actor>
      <actor>Алексей Фролов</actor>
    </credits>
  </programme>
  <programme start="20160312042000" stop="20160312061500" channel="2">
    <title lang="ru">Когда цветет сирень</title>
    <desc lang="ru">Произведено: Россия. Главная героиня живёт в маленькой квартире со своей пожилой матерью и маленьким сыном. Чтобы содержать семью, она вынуждена много работать и времени на личную жизнь у неё практически не остаётся. Подруга, работающая домработницей в богатой семье, чтобы хоть немного развлечь героиню, зовёт её с собой в гости к друзьям своего жениха...</desc>
    <category lang="ru">Фильм</category>
    <credits>
      <director>Сергей Борчуков</director>
      <actor>Людмила Курепова</actor>
      <actor>Елена Захарова</actor>
      <actor>Антон Макарский</actor>
      <actor>Александр Пороховщиков и другие</actor>
    </credits>
    <date>2010</date>
  </programme>

А скрипт вот так
$G = date ("G") - 1;
$date =  date("Ymd".$G."is");
$channel = 3;

$tv = new SimpleXMLElement ("xmltv.xml", 0, true);

foreach ($tv as $v)
{
    if ($date >= $v->attributes()->start && $date <= $v->attributes()->stop )
    {   
        if ($v->attributes()->channel == $channel)
        { 
	    echo "<h2>".$v->title." (".$v->category.")</h2>";
            echo "<h3>".$v->desc."</h3><br />";   
        }
    }
}

programme start="2016-03-12-04-10-00"
Что за цифры обьясню ,это год-месяц-день-час-минута-секунда
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
$found = false;
foreach ($tv as $i => $v)
{
    if (!$found && ($date >= $v->attributes()->start && $date <= $v->attributes()->stop ))
    {   
        if ($v->attributes()->channel == $channel)
        { 
            echo "<h2>".$v->title." (".$v->category.")</h2>";
            echo "<h3>".$v->desc."</h3><br />";   
            $found = $i;
        }
    } elseif($i - $found <= 2) {
        if ($v->attributes()->channel == $channel)
        { 
             echo "<h2>".$v->title." (".$v->category.")</h2>";
             echo "<h3>".$v->desc."</h3><br />";   
         }
    } else {
         break;
    }
}


Но это говнокод... Вам лучше полностью переписать логику вывода.
Сначала группируйте по каналу, создавая коллекцию программ. После чего пройдитесь циклом, при нахождении нужной программы выводите две следующие (по индексу).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы