我正在尝试解析一个可能有数千个结果的 API 响应,因此它提供了一个@odata.nextLink. 我想在一个数组中返回所有结果,所以在我发出一个具有 的 curl 请求后nextLink,我使用 php aray union 将结果添加到前一个数组中
$result_array = $api_response['value']; //store initial response
while (array_key_exists('@odata.nextLink', $api_response)) {
curl_setopt_array($curl, array(
CURLOPT_URL => $api_response['@odata.nextLink'],
(more options)...
)):
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
$api_response = json_decode($response, TRUE);
$result_array = $result_array + $api_response['value'];
}
}
响应看起来像这样
{
"@odata.context":"https:/api.com/v1/query","value":[
{
"Sku":"ABC","ID":123
},
(more records)...
],"@odata.nextLink":"https://api.com/v1/query&$skip=200"
}
数组看起来像这样print_r
(
[0] => Array
(
[Sku] => abc
[ID] => 123
)
[1] => Array
(
[Sku] => efg
[ID] => 456
)
(more results)...
)
但是,它在 5000 之后停止向数组添加元素。我执行脚本文件php -f以进行测试。我尝试ini_set('memory_limit', '1000M');像建议的那样克服内存限制,但它没有帮助。这是对 PHP CLI 的某种限制吗?在实时服务器上,这还会发生吗?最终,我想对大型数据集中的每个产品 id 发出另一个 curl 请求(可能是批量),以查看 api 是否可以处理它。
编辑:当我的意思是设置 curl 时,我将 curl 请求更改为下一个链接。我添加了更改以进行澄清,并表明它不会无限循环。
编辑2:好的,所以我对正在发生的事情有了更好的了解。API 返回value2d 数组,每个内部数组是不同的记录。它会多次返回 100 个结果,直到提供 5000 个结果。数组键每次都会重置。将初始$result_array值设置为前 100 个结果后,加号运算符不会附加下一个 100,因为它们是相同的键。一旦 API 开始返回 5000 个结果,它就会从索引 100 追加到 4999。后续请求不会像以前那样添加更多。php中是否有一个数组函数可以将多维数组相互附加,就像+对一维数组一样?我可以做一个foreach正确追加,但如果已经有一个内置方法,这似乎很乏味。