2017-07-16 37 views
0

我正在嘗試從我在YouTube上創建的播放列表中提取標題和視頻ID。使用php從json結果中提取項目(項目顯示不止一次)

我使用youtube api v3將播放列表結果恢復爲json格式。

我可以提取我需要的信息,但由於某些原因,結果不像預期的那樣回來。

例如,我在這個播放列表中有三個視頻作爲測試,當我查看json結果時,它還列出了3個項目。

但是,當我使用下面的代碼列出項目時,前兩項每次都列出4次,最後一項列出一次。

P.S我遺漏了$url因爲它不是我的問題的原因。

$result77 = file_get_contents($url); 
$YTapiJSON = json_decode($result77, TRUE); 
foreach ($YTapiJSON['items'] as $key){ 
    foreach ($key as $key2) { 
     foreach ($key2 as $key3) { 
      $title = $key2['title']; 
      $key4 = $key2['resourceId']['videoId']; 
     } 
     if(!empty($key4)) { 
      echo $title. "Added " .$key4. "<br>"; 
     } 
    } 
} 
+0

不知道如何 「標籤」 我的代碼正確。因爲你可能可以解決這個問題,所以我很想在這裏發佈,並且仍然試圖找出如何顯示代碼以及我需要提問的所有內容。 – Born2DoubleUp

+0

我更新了我的第一篇文章,希望能提供更多的幫助。 – Born2DoubleUp

回答

0

不是這麼多的foreach循環,我會用一對夫婦的array_column()調用是這樣的:(Demo

$titles=array_column(array_column(json_decode($json,true)['items'],'snippet'),'title'); 
var_export($titles); 

首先,JSON轉換爲數組,然後訪問items子陣,然後收集snippet子數組,然後從中收集title值。

輸出:

array (
    0 => 'test title 1', 
    1 => 'test title 2', 
    2 => 'test title 3', 
) 

如果你想titlevideoId,那麼你可以使用它代替:

$snippets=array_column(json_decode($json,true)['items'],'snippet'); 
foreach($snippets as $a){ 
    echo $a['title'],(!empty($a['resourceId']['videoId'])?" Added: {$a['resourceId']['videoId']}":''),"\n"; 
} 

這裏是一個Demo,我已經修改了第二視頻的視頻ID (使其變空)以起作用。

輸出:

test title 1 Added: Da8-QfGemgo 
test title 2 
test title 3 Added: 5lvkwZZZmGc 
+0

這完成了我想要的。謝謝! – Born2DoubleUp

+0

@ Born2DoubleUp請閱讀:https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – mickmackusa