2016-05-12 7 views
0

私は、JSONをループし、JSONにリストされた各ビデオの適切なIDをYoutube APIを使用して返すことになっているforeachループを持っています。 は、ここに私のコードです:PHP foreach配列ID

class Videos { 
    private $mVideoUrl; 

    function setVideoTitle($videoUrl){ 
     $this->mVideoUrl= $videoUrl; 
    } 

    function getVideoTitle(){ 
     return $this->mVideoUrl; 
    } 
} 

$jsonFile = file_get_contents($url); 
$jfo = json_decode($jsonFile); 
$items = $jfo->items; 
$vidArray = array(); 

foreach ($items as $item){ 
    if(!empty($item->id->videoId)){ 
     $Videos = new Videos; 
     $Videos->setVideoUrl($item->id->videoId); 
     $id = $Videos->getVideoUrl(); 
     array_push($vidArray, $id); 
    } 
    echo $vidArray[0]; 
} 

問題は、配列のプッシュが正常に機能しているが、私はそれをエコーするとき、それは唯一の唯一の各ループ反復のために、リスト内の最初のIDを追加しています。 $ id変数をエコーすると、すべてのIDが正常に出力されます。

最終的に私は、各ビデオのオブジェクトを作成し、IDやその他の情報を格納できるようにしたいと考えています。

私はこれが簡単な修正だと思っていますが、私は私の人生のためにそれを理解することはできません。 私は助けていただければ幸いです! また、私はこのすべてについて間違っているとしたら、アドバイスも高く評価されています!

ありがとうございます!

+0

'echo $ vidArray [0];は、最初の要素のみをエコーし​​ます。 'print_r($ vidArray);を試してください。 – AbraCadaver

答えて

1

私はあなたのコードで少し演奏しました。あなたのクラスを修正しました。私は複数のビデオをビデオに(単数)名前を変更しました。

次に、プロパティの名前はシンプルで、保存するデータを表す必要があるため、$ id属性を追加しました。

次に、$ idプロパティにgetterとsetterを追加しました。

私は$ urlを知らないので、単純なJSON文字列を書くだけです。あなたのコードで使っている構造を模倣しようとしました。

次に、適切なコンストラクタが呼び出されるように新しいVideo()の最後に()を追加しました。

要素を配列にプッシュするのではなく、適切な$ array [$ index] =割り当てを使用しています。

最後に、私はforeach-cycleからデータを書き出しました。そして私は別のファイルにリダイレクトされた場合に再生するために適切なPHPコードを取得するためにvar_exportを使用しています。

<?php 

class Video 
{ 
    private $mVideoUrl; 
    private $id; // added id attribute 

    /** 
    * @return mixed 
    */ 
    public function getId() // added getter 
    { 
     return $this->id; 
    } 

    /** 
    * @param mixed $id 
    */ 
    public function setId($id) // added setter 
    { 
     $this->id = $id; 
    } 


    function setVideoTitle($videoUrl) 
    { 
     $this->mVideoUrl = $videoUrl; 
    } 

    function getVideoTitle() 
    { 
     return $this->mVideoUrl; 
    } 
} 

// ignored for now 
// $jsonFile = file_get_contents($url); 
$jsonFile = '{"items": [ 
     { "id": { "videoId": 1, "url": "http://www.youtube.com/1" } }, 
     { "id": { "videoId": 2, "url": "http://www.youtube.com/2" } }, 
     { "id": { "videoId": 3, "url": "http://www.youtube.com/3" } }, 
     { "id": { "videoId": 4, "url": "http://www.youtube.com/4" } }, 
     { "id": { "videoId": 5, "url": "http://www.youtube.com/5" } } 
    ] 
}'; 

$jfo = json_decode($jsonFile); 

$items = $jfo->items; 
$vidArray = array(); 

foreach ($items as $item) 
{ 
    if (!empty($item->id->videoId)) 
    { 
     $Video = new Video(); // added brackets 

     $Video->setId($item->id->videoId); // changed to setId 
     $Video->setVideoTitle($item->id->url); 
     $id = $Video->getId(); 
     $vidArray[$id] = $Video; 
    } 

} 

// write out all data 
var_export($vidArray); 
1

あなたのコードでは、あなたのクラスのビデオは2つの機能

setVideoTitle(...), 
getVideoTitle() 

が含まれていますが、あなたのforeachの中で、あなたはこの何であるか$videos->getVideoUrl() , $videos->setVideoUrl(...)

と呼ばれています?