2016-05-12 3 views
0

У меня есть цикл foreach, который должен проходить через JSON и возвращать соответствующий идентификатор каждого видео, указанного в JSON, с помощью api Youtube. Вот мой код:Идентификаторы массива PHP foreach

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]; 
} 

Проблема в том, толкающий массив работает правильно, но это только добавление 1-идентификатор в списке только для каждой итерации цикла, когда я эхо его. Когда я повторяю переменную $ id, она полностью выводит все идентификаторы.

В конечном счете, я хочу, чтобы иметь возможность создавать объект для каждого видео, сохраняя его идентификатор и другую информацию.

Я чувствую, что это простое исправление, но я не могу понять это для жизни меня. Буду признателен за любую помощь! Также, если я собираюсь все это неправильно, совет также оценен!

Спасибо!

+0

'echo $ vidArray [0];' только echos первый элемент. Попробуйте 'print_r ($ vidArray);' – AbraCadaver

ответ

1

Я немного играл с вашим кодом. Я изменил ваш класс. Я переименовал многократные видео в видео (единственное).

Затем я добавил атрибут $ id, потому что имя свойств должно быть простым и представлять данные, которые мы хотим сохранить в них.

Затем я добавил getter и setter для свойства $ id.

Я не знаю $ url, поэтому я просто написал просто строку JSON. Я попытался имитировать структуру, которую вы используете в своем коде.

Затем я добавил() в конец нового видео(), чтобы вызвать соответствующий конструктор.

И вместо того, чтобы вставлять элементы в массив, я использую правильный $ array [$ index] = присваивание.

Последнее, что я переложил данные из цикла foreach. И я использую var_export, чтобы получить правильный PHP-код для воспроизведения, если он перенаправлен на другой файл.

<?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

В коде ваш класс Видео содержит две функции

setVideoTitle(...), 
getVideoTitle() 

, но в вашем Еогеасп вы назвали $videos->getVideoUrl() , $videos->setVideoUrl(...)

что это ???

Смежные вопросы