Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法获取PHP函数以重新运行和更新数组_Php_Arrays_Curl - Fatal编程技术网

无法获取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

我的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,则停止并回显结果

但是,这不会返回任何结果

我想我有一个全局变量问题

请注意,如果我删除所有条件和函数,我知道查询是有效的,所以这不是问题所在


有关于如何修复的建议吗?

您的
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[]