2016-10-09 3 views
1

Я в основном пытаюсь создать средство просмотра epg на основе некоторых json-данных.PHP: Loop через json, сравнивая текущее время с временным диапазоном, основанное на двух значениях ключей

мне нужна помощь, чтобы выяснить, как:

  1. Перебор данных JSON.
  2. Получите значения «start» и «stop» (временные метки unix) для каждой программы.
  3. Укажите временной диапазон для каждой программы на основе старта/остановки временных меток.
  4. Сравните временной диапазон каждой программы с текущим временем unix.
  5. Показать программу, которая имеет временной диапазон, соответствующий текущему времени.

Это то, что выглядит данные JSON, как:

[ 
    { 
     "id": 1, 
     "programs": [ 
      { 
       "stop": 1475982300, 
       "start": 1475976300, 
       "category": "Serier", 
       "id": 356532927, 
       "title": "Kommissær Alleyn" 
      }, 
      { 
       "stop": 1475983500, 
       "start": 1475982300, 
       "category": "Børn", 
       "id": 355997207, 
       "title": "Udsendelsesophør" 
      }, 
      { 
       "stop": 1475985000, 
       "start": 1475983500, 
       "id": 358595605, 
       "title": "DR-Friland: Frilandshaven" 
      }, 
      { 
       "stop": 1475986800, 
       "start": 1475985000, 
       "category": "Dokumentar", 
       "id": 358595606, 
       "title": "Bonderøven 2010" 
      }, 
      { 
       "stop": 1475989500, 
       "start": 1475986800, 
       "category": "Dokumentar", 
       "id": 355933560, 
       "title": "Made in Denmark" 
      }, 
      { 
       "stop": 1475992500, 
       "start": 1475989500, 
       "category": "Dokumentar", 
       "id": 357701600, 
       "title": "De forunderlige dyr" 
      }, 
      { 
       "stop": 1475995500, 
       "start": 1475992500, 
       "category": "Dokumentar", 
       "id": 358745047, 
       "title": "Italien: Fra Sardinien til Abruzzo" 
      }, 
      { 
       "stop": 1476001200, 
       "start": 1475995500, 
       "category": "Serier", 
       "id": 356295670, 
       "title": "Mord på hjernen" 
      }, 
      { 
       "stop": 1476004800, 
       "start": 1476001200, 
       "category": "Underholdning", 
       "id": 357701601, 
       "title": "Puk og Herman går i land - Endelave" 
      }, 
      { 
       "stop": 1476008100, 
       "start": 1476004800, 
       "category": "Dokumentar", 
       "id": 355933566, 
       "title": "Guld på godset" 
      }, 
      { 
       "stop": 1476011700, 
       "start": 1476008100, 
       "category": "Dokumentar", 
       "id": 357701602, 
       "title": "Guld på godset" 
      }, 
      { 
       "stop": 1476017700, 
       "start": 1476011700, 
       "category": "Serier", 
       "id": 356182011, 
       "title": "Kriminalkommissær Barnaby" 
      }, 
      { 
       "stop": 1476023700, 
       "start": 1476017700, 
       "category": "Sport", 
       "id": 358577056, 
       "title": "HåndboldSøndag: HC Motor Zaporozhye-TTH Holstebro (m), direkte" 
      }, 
      { 
       "stop": 1476030600, 
       "start": 1476023700, 
       "category": "Sport", 
       "id": 358577057, 
       "title": "HåndboldSøndag: Bjerringbro Silkeborg-THW Kiel (m), direkte" 
      }, 
      { 
       "stop": 1476032400, 
       "start": 1476030600, 
       "category": "Nyheder", 
       "id": 355933567, 
       "title": "TV AVISEN med Sporten og Vejret" 
      }, 
      { 
       "stop": 1476032700, 
       "start": 1476032400, 
       "id": 363167503, 
       "title": "Guld i Købstaden - en hurtig handel" 
      }, 
      { 
       "stop": 1476036000, 
       "start": 1476032700, 
       "category": "Dokumentar", 
       "id": 359619002, 
       "title": "Atlanterhavet: Verdens vildeste hav" 
      }, 
      { 
       "stop": 1476039600, 
       "start": 1476036000, 
       "category": "Serier", 
       "id": 355933569, 
       "title": "Bedrag II" 
      }, 
      { 
       "stop": 1476042000, 
       "start": 1476039600, 
       "category": "Nyheder", 
       "id": 355933570, 
       "title": "21 Søndag" 
      }, 
      { 
       "stop": 1476042600, 
       "start": 1476042000, 
       "category": "Sport", 
       "id": 358745049, 
       "title": "Sporten" 
      }, 
      { 
       "stop": 1476049200, 
       "start": 1476042600, 
       "category": "Film", 
       "id": 355933571, 
       "title": "Killer Elite" 
      }, 
      { 
       "stop": 1476054600, 
       "start": 1476049200, 
       "category": "Film", 
       "id": 356069380, 
       "title": "BlackJack" 
      }, 
      { 
       "stop": 1476060600, 
       "start": 1476054600, 
       "category": "Serier", 
       "id": 356069381, 
       "title": "Taggart: Døden checker ind" 
      }, 
      { 
       "stop": 1476066300, 
       "start": 1476060600, 
       "category": "Film", 
       "id": 355933572, 
       "title": "Mørkets gerninger" 
      }, 
      { 
       "stop": 1476069000, 
       "start": 1476066300, 
       "category": "Dokumentar", 
       "id": 362546476, 
       "title": "DR1 Dokumentar: Danskere omringet af IS" 
      } 
     ] 
    } 
] 

Это PHP У меня есть до сих пор:(я знаю, что это не так много, я просто этого не делают. знать, как идти дальше отсюда)

<?php 
$channel = '1'; 
$current_unix = time(); 
$json = json_decode(file_get_contents('http://tvtid-app-backend.tv2.dk/api/tvtid/v1/dayviews/'.date('Y-m-d').'?ch='.$channel), true); 
$programs = $json[0]['programs']; 
$programs_length = count($programs); 
for ($i = 0; $i < $programs_length ; $i++) 
{ 
    $begin = [$programs[$i]['start']]; 
    $end = [$programs[$i]['stop']]; 
    $title = [$programs[$i]['title']]; 
} 
?> 

И это, как результат должен выглядеть:(Пример времени 16:41)

<ul> 
    <li class="program"> 
     <div class="title_now">TV AVISEN med Sporten og Vejret</div> 
     <div class="duration_now"> 
     <div class="now_begin">16:30</div><span class="begin">1476030600</span> 
     <div class="progress_bar"><div class="progress"></div></div> 
     <div class="now_end">17:00</div><span class="end">1476032400</span></div> 
    </li> 
    <li class="program"> 
     <div class="title">Guld i Købstaden - en hurtig handel</div> 
     <div class="duration">17:00-17:05</div> 
    </li> 
    <li class="program"> 
     <div class="title">Atlanterhavet: Verdens vildeste hav</div> 
     <div class="duration">17:05-18:00</div> 
    </li> 
    <li class="program"> 
     <div class="title">Bedrag II</div> 
     <div class="duration">18:00-19:00</div> 
    </li> 

    etc... 

</ul> 

Я надеюсь, что это имеет смысл, и что кто-то может помочь мне.

ответ

1

Для обработки полного массива намного проще использовать foreach.

$channel = '1'; 
$current_unix = time(); 

// note I have removed the TRUE option from json_decode() 

$json = json_decode(file_get_contents('http://tvtid-app-backend.tv2.dk/api/tvtid/v1/dayviews/'.date('Y-m-d').'?ch='.$channel)); 
//print_r($json); 

echo '<ul>'; 

foreach ($json as $data) { 

    echo '<li>'; 
    foreach ($data->programs as $prog) { 

     if ($current_unix < $prog->start) { 

      // add your own HTML instead of the simple echo 
      echo $prog->title . '<br>'; 
      echo $prog->start . '<br>'; 
      echo $prog->stop . '<br>'; 
      echo $prog->id . '<br>'; 
      if (isset($prog->category)) { 
       echo $prog->category . '<br>'; 
      } 
     } 
    } 
    echo '</li>'; 
} 
echo '</ul>'; 
+0

Благодарим Вас за проявленное, как сделать более простой способ обработки данных JSON :) ли вы случайно также быть в состоянии показать мне, как только эхо программу, которая соотносится с текущим временем и все следующие программы? (Не программы после текущего времени). – Ace

+0

Уверен, что вы идете – RiggsFolly

+0

Спасибо, очень очень @RiggsFolly :) Это действительно спасло мой день! Просто расшифровал if-statement для этого 'if ($ current_unix < $prog-> start || $ prog-> stop> $ current_unix) {' для отображения текущей программы;) – Ace