在函数中调用函数直到满足条件

时间:2019-07-29 12:10:46

标签: php

我正在查询salesforce,每个电话返回: 2000条记录 标有“完成”的布尔值 查询下一个2000条记录的下一个URL。

如果done是错误的,我需要对下一个URL进行下一次调用,并获取下2000条记录,检查是否完成,并在必要时重复。

$accounts = array();

function listAccounts($data,$accounts){

    $ch = curl_init();
    //curl options
    $result = curl_exec($ch);
    curl_close($ch);
    $res = json_decode($result);
    foreach ($res->records as $k => $v){
            $accounts[] = $v->Name;
    }
    if ($res->done !== true){
            $data['listAccounts'] = $res->nextRecordsUrl;
            listAccounts($data,$accounts);
    }

    return $accounts;
}
print_r(listAccounts($data,$accounts));

上面的方法仅返回前2000个。我希望它重复listAccounts函数,直到$ res-> done!== true。如果我在函数中回显$ v-> name,它将打印出我期望的所有5,000多个记录。我知道我需要将$ accounts var传递给下一个函数调用,但这似乎没有实现。

1 个答案:

答案 0 :(得分:1)

您可以使用pass by reference

 function listAccounts($data,&$accounts);

您的代码

$accounts = array();
function listAccounts($data,&$accounts){
  $ch = curl_init();
  //curl options
  $result = curl_exec($ch);
  curl_close($ch);
  $res = json_decode($result);
  foreach ($res->records as $k => $v){
          $accounts[] = $v->Name;
  }
  if ($res->done !== true){
    $data['listAccounts'] = $res->nextRecordsUrl;
    listAccounts($data,$accounts);
  }

return $accounts;
}
print_r(listAccounts($data,$accounts));