我有一个foreach循环,它应该循环通过JSON并使用Youtube api返回JSON中列出的每个视频的相应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 :(得分:1)
在您的代码中,您的班级视频包含两个功能
setVideoTitle(...),
getVideoTitle()
但在您的foreach中,您已拨打$videos->getVideoUrl() , $videos->setVideoUrl(...)
这是什么???
答案 1 :(得分:1)
我对你的代码玩了一点点。我修改了你的课程。我已将plurar视频重命名为视频(单数)。
然后我添加了一个属性$ id,因为属性名称应该很简单,并且代表我们想要存储在其中的数据。
然后我为$ id属性添加了getter和setter。
我不知道$ url,所以我只是编写简单的JSON字符串。我试图模仿你在代码中使用的结构。
然后我将()添加到新Video()的末尾,以便调用适当的构造函数。
而不是将元素推入数组,我使用正确的$ array [$ index] =赋值。
最后,我已经将数据写出了foreach-cycle。如果重定向到另一个文件,我可以使用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);