我的PHP代码看起来像这样:
$size=1;
$newoffset=0;
$final=[];
function runQuery()
{
global $newoffset;
global $size;
global $final;
$SECRET_KEY = 'XXX';
$s = hash_hmac('sha256','/api/v2/tags?limit=100&offset='.$newoffset.'-', $SECRET_KEY, false);
$curl = curl_init();
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';
$headers[] = "RT-ORG-APP-CLIENT-ID: XXX";
$headers[] = "RT-ORG-APP-HMAC: ". $s;
curl_setopt_array($curl, array(
CURLOPT_URL => 'api/v2/tags?limit=100&offset='.$newoffset,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$array = json_decode( $response, true );
$results = $array['data'];
//print_r($results); This returns correctly
$size = sizeof($array['data']); //size of array
$result = array();
if ($size>0){
//print_r($results); This also returns correctly
$newoffset += 100;
foreach($results as $member) {
$result[] = array(
'tag_name' => $member['name'],
'tag_id' => $member['id'],
'tag_public_id' => $member['public_id'],
);
}
$final['all_tags'] = $result;
}
}
}//end function
if($size>0){
runQuery();
}else{
echo json_encode($final);
}
这应该做的是运行curl
,如果它返回结果,则将这些结果推送到$final
。如果有结果,则增加变量(newoffset
)的值,以便可以在curl请求中使用它。这是因为我一次只能获得100个结果,并且需要根据需要多次offset
才能获得所有结果。
如果返回的内容的大小为0,则停止并回显结果。
然而,这没有任何回报。
我认为我有一个全局变量问题。
请注意,如果删除所有条件和函数,我知道查询有效,因此不是问题。
有关如何修复的任何建议吗?
答案 0 :(得分:2)
您的runQuery
功能只运行一次,因为您只调用一次。执行不会在函数声明结束的行继续执行,它会在调用函数的地方继续执行,在您的情况下,它是脚本的结尾。
您必须移动
if($size>0){
runQuery();
}else{
echo json_encode($final);
}
参与该功能,只需拨打runQuery
一次。
此外,不鼓励使用全局变量,因为它可能导致与其他代码发生冲突。最好使用函数参数和返回值。