无法获取PHP函数以重新运行和更新数组
我的PHP代码如下所示:无法获取PHP函数以重新运行和更新数组,php,arrays,curl,Php,Arrays,Curl,我的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, f
$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,则停止并回显结果
但是,这不会返回任何结果
我想我有一个全局变量问题
请注意,如果我删除所有条件和函数,我知道查询是有效的,所以这不是问题所在
有关于如何修复的建议吗?您的
runQuery
函数只运行了一次,因为您只调用了一次。执行不会在函数声明结束的那一行继续,而是在调用函数的地方继续执行,在您的情况下,这就是脚本的结尾
你得把箱子搬走
if($size>0){
runQuery();
}else{
echo json_encode($final);
}
进入函数,只需调用一次runQuery
此外,不鼓励使用全局变量,因为这可能会导致与其他代码冲突。最好使用函数参数和返回值。我建议从格式化代码开始。一些合理的代码缩进将是一个好主意。它帮助我们阅读代码,更重要的是,它将帮助您为自己的利益调试代码。您可能会被要求在几周/几个月内修改此代码,最终您将感谢我。真的吗?看起来不像是这样me@jonmrich我也是,你改变了一行的缩进。运行5或6次,没有循环?谢谢…这很有意义。如果我这样做,我只得到函数的最后一次运行sense@RiggsFolly那你有什么建议吗?抱歉,我得去开会了。它只返回最后一次跑步,因为你每次跑步都会覆盖
$final['all_tags']]
。在foreach循环中用$final['all_tags'][
替换$result[]
。