无法获取PHP函数来重新运行和更新数组

时间:2017-08-02 15:25:28

标签: 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, 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,则停止并回显结果。

然而,这没有任何回报。

我认为我有一个全局变量问题。

请注意,如果删除所有条件和函数,我知道查询有效,因此不是问题。

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

1 个答案:

答案 0 :(得分:2)

您的runQuery功能只运行一次,因为您只调用一次。执行不会在函数声明结束的行继续执行,它会在调用函数的地方继续执行,在您的情况下,它是脚本的结尾。

您必须移动

if($size>0){
    runQuery();
}else{
    echo json_encode($final);
}

参与该功能,只需拨打runQuery一次。

此外,不鼓励使用全局变量,因为它可能导致与其他代码发生冲突。最好使用函数参数和返回值。