使用PHP循环分页数据JSON
我正在使用RESTAPI,它以分页格式返回数据。1页将有100条记录。如果有更多数据,将定义一个“hasMore”参数和“offset”参数,您可以使用该参数检索下一页的结果 到目前为止,我得到了以下代码:使用PHP循环分页数据JSON,php,json,Php,Json,我正在使用RESTAPI,它以分页格式返回数据。1页将有100条记录。如果有更多数据,将定义一个“hasMore”参数和“offset”参数,您可以使用该参数检索下一页的结果 到目前为止,我得到了以下代码: function getData(){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "ENDPOINT", CURLOPT_RETURNTRANSFER
function getData(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "ENDPOINT",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$data = json_decode($response);
//if there is more get them.....
if($data->hasMore == 1){ //make another request...
while($data->hasMore == 1){
$offset = $data->offset;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "ENDPOINT",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$data = json_decode($response);
$allData = array_merge($data->data, $data->data);
}
}
return $data; //return the results for use
}
我的问题是,我正在努力让它检查是否有更多的数据,以及是否有下一页的请求都在同一个函数中。我希望这是有意义的,我将感谢您提供的任何帮助或建议
现在我有它的工作,因为我知道还有另一页。问题是如何创建它,以便它检查参数以查看是否有更多的页面请求,以及是否有另一个页面请求并附加到现有的数据数组中 您的函数很好,但是您应该真正将getData函数和循环部分分开
function getData(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "ENDPOINT",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$data = json_decode($response);
return $data; //return the results for use
}
do{
$data = getData();
$i = 0;
for(i=0; i<data.length; i++){
//do data processing here
}
}while(data->hasMore == 1);
函数getData(){
$curl=curl_init();
curl_setopt_数组($curl,数组(
CURLOPT_URL=>“端点”,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_编码=>“”,
CURLOPT_MAXREDIRS=>10,
CULLOPT_超时=>30,
CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST=>“获取”,
CURLOPT_HTTPHEADER=>数组(
“缓存控制:无缓存”
),
));
$response=curl\u exec($curl);
$data=json_decode($response);
return$data;//返回结果以供使用
}
做{
$data=getData();
$i=0;
对于(i=0;ihasMore=1);
您的函数很好,但是您应该真正将getData函数和循环部分分开
function getData(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "ENDPOINT",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$data = json_decode($response);
return $data; //return the results for use
}
do{
$data = getData();
$i = 0;
for(i=0; i<data.length; i++){
//do data processing here
}
}while(data->hasMore == 1);
函数getData(){
$curl=curl_init();
curl_setopt_数组($curl,数组(
CURLOPT_URL=>“端点”,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_编码=>“”,
CURLOPT_MAXREDIRS=>10,
CULLOPT_超时=>30,
CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST=>“获取”,
CURLOPT_HTTPHEADER=>数组(
“缓存控制:无缓存”
),
));
$response=curl\u exec($curl);
$data=json_decode($response);
return$data;//返回结果以供使用
}
做{
$data=getData();
$i=0;
对于(i=0;ihasMore=1);
基于@TommyLee answer,但使用返回的偏移量(仅猜测应该如何使用): 这样,如果未向
getData()
传递任何内容,则假定偏移量为0,否则,将传递上一个响应的下一个偏移量
同样,偏移量是如何使用的还不清楚,因此您可能需要调整我的示例,以适应基于@tommyley answer的
$offset
的正确用法,但使用返回的偏移量(仅猜测应该如何使用它):
这样,如果未向getData()
传递任何内容,则假定偏移量为0,否则,将传递上一个响应的下一个偏移量
同样,偏移量是如何使用的还不清楚,因此您可能需要调整我的示例以适合
$offset
的正确用法这很好,但它没有使用OP提到的“offset”参数(OP的示例代码也没有,但我认为这是问题的一部分)。可能需要将此偏移量传递到getData()
,以便它获取下一页/批数据。这很好,但它没有使用OP提到的“offset”参数(OP的示例代码也没有,但我认为这是问题的一部分)。可能需要将此偏移量传递到getData())
以便获取下一页/批数据。API端点希望如何将偏移量
作为查询字符串参数传递给它(如端点?偏移量=x)或者作为文章正文的一部分?示例代码在第二个curl请求中实际上没有使用$offset
。我在第二个curl请求中将offset参数作为查询字符串的一部分传递。而不是在您提供的代码中。API端点希望如何将offset
作为查询字符串参数传递给它(类似端点?偏移=x)或者作为帖子正文的一部分?您的示例代码在第二个curl请求中没有实际使用$offset
。我在第二个curl请求中将offset参数作为查询字符串的一部分传递。不是在您提供的代码中。我修改了此参数并自发布了类似问题的答案-我修改了此参数并自发布了t他回答了一个类似的问题-