我正在开发一个API来获取数据,就像其他标准API一样,它限制了项目的返回数量,例如:在我的情况下,每个页面只返回1个项目。所以,我必须得到
问题是,无论我将其设置为递归,仍会在第一个周期返回值。例如如果总共有3个项目,并且每页限制为1个项目,则它将在第1个循环期间返回该值。
为什么以及如何解决这个问题?
非常感谢
nvp< T > make_nvp(const char * name, T & t){
return nvp< T >(name, t);
}
答案 0 :(得分:1)
您没有将递归回调的返回值分配回$ filter_video,请更改为:
if ($total_count > $page_size * $page_number) {
$filter_video = get_video_list($page_number, $filter_video);
}
或者,甚至更好:通过引用传递。这样就完全不需要返回值,尤其适用于递归函数(函数声明中的notice&amp; $ filter_video,请参阅http://php.net/manual/en/language.references.pass.php)。
function get_video_list($page_no = 0, &$filter_video = array()) {
$api = "http://api.brightcove.com/services/library?command=search_videos&page_size=1&video_fields=id%2Cname%2CcreationDate%2CFLVURL%2CpublishedDate%2ClinkURL%2CthumbnailURL%2Clength&media_delivery=http&sort_by=CREATION_DATE%3AASC&page_number=$page_no&get_item_count=true&token=" . READ_TOKEN;
try {
$ch = curl_init();
if (FALSE === $ch) {
throw new Exception('failed to initialize');
}
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
if (FALSE === $content) {
throw new Exception(curl_error($ch), curl_errno($ch));
}
$video_list = json_decode($content, false, 512, JSON_BIGINT_AS_STRING);
$page_number = ($video_list->page_number) + 1; //start at 0
$page_size = $video_list->page_size;
$total_count = $video_list->total_count;
foreach ($video_list->items as $video) {
if (in_array($video->id, $stored_video)) {
$filter_video [] = $video;
}
}
if ($total_count > $page_size * $page_number) {
get_video_list($page_number, $filter_video);
}
} catch (Exception $e) {
trigger_error(sprintf('Curl failed with error #%d: %s', $e->getCode(), $e->getMessage()), E_USER_ERROR);
}
}
然后这样称呼:
$myVideoList = [];
get_video_list(0, $myVideoList);
// Do stuff with $myVideoList
答案 1 :(得分:0)
这可以解决您的问题。
if ($total_count > $page_size * $page_number) {
return get_video_list($page_number, $filter_video);
}