使用PHP Curl从JSON中查找匹配值?
因此,我有一个包含一些jSON数据的页面,我想用cURL收集到数组中。准确地说,cURL是从PHP程序使用的,而不是从命令行使用的 我可以通过下面的代码块很好地完成这一部分:使用PHP Curl从JSON中查找匹配值?,php,arrays,json,curl,multidimensional-array,Php,Arrays,Json,Curl,Multidimensional Array,因此,我有一个包含一些jSON数据的页面,我想用cURL收集到数组中。准确地说,cURL是从PHP程序使用的,而不是从命令行使用的 我可以通过下面的代码块很好地完成这一部分: $token = 'my_token_here'; $headers = ['Authorization: Bearer ' . $token]; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true,
$token = 'my_token_here';
$headers = ['Authorization: Bearer ' . $token];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLINFO_HEADER_OUT => true,
CURLOPT_URL => 'https://my.infrastructure.com/api/v1/accounts/search',
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_HTTPHEADER => $headers
]);
$resp = curl_exec($curl);
curl_close($curl);
$data = json_decode($resp);
dd($data);
这将返回一个2D数组,其中包含上面URL中页面上的所有帐户,每个数组包含一个带有ID、名称等变量的“帐户”
如果我运行“print\r($data)”,打印输出如下:
Array ( [0] => stdClass Object ( [id] => 130375 [name] => 3Lakes [domain] => 3lakes.instructure.com [distance] => [authentication_provider] => google ) [1] => stdClass Object ( [id] => 130376 [name] => 3Lakes - Parents [domain] => 3lakes.instructure.com [distance] => [authentication_provider] => canvas ) [2] => stdClass Object ( [id] => 126425 [name] => 95 Percent Group [domain] => 95percentgroup.instructure.com [distance] => [authentication_provider] => ) [3] => stdClass Object ( [id] => 129409 [name] => AACM [domain] => aacm.instructure.com [distance] => [authentication_provider] => canvas ) [4] => stdClass Object ( [id] => 129272 [name] => Aalen [domain] => aalen.instructure.com [distance] => [authentication_provider] => canvas ) [5] => stdClass Object ( [id] => 129572 [name] => Aaron Cohn Middle School - MCSD [domain] => mcsd.instructure.com [distance] => [authentication_provider] => ldap ) [6] => stdClass Object ( [id] => 128124 [name] => Abilene Christian University [domain] => acu.instructure.com [distance] => [authentication_provider] => ) [7] => stdClass Object ( [id] => 127204 [name] => Abilene Christian University Online [domain] => acuonline.instructure.com [distance] => [authentication_provider] => ) [8] => stdClass Object ( [id] => 130398 [name] => Abington Public Schools [domain] => abington.instructure.com [distance] => [authentication_provider] => canvas ) [9] => stdClass Object ( [id] => 128797 [name] => Academia Virtual [domain] => canvas.academiavirtual.cr [distance] => [authentication_provider] => ) )
现在,我不想做所有这些,我只想收集一个数组,其中该数组的ID等于我给它的ID;i、 e如果我想找到ID“15”,它会返回与之匹配的数组,或者返回null
不过,我不知道怎么做。我知道,在查询之后,我可以使用PHP来梳理检索到的$data并检查每个数据,但我想做得更流畅一些,大概是在curl_setopt_数组区域
我想用这种方式做的事情可能吗?有什么建议吗?你在这里有些困惑。 cURL对传输的数据格式没有影响,因为它是一个用于联网的库。 您已经获得了解决方案,在阵列上循环并根据需要重新构造数据。 此外,您没有2D数组,而是一个
stdClass
对象数组
因此,首先,如果您想要一个2d数组,您应该传递true
作为第二个参数,使其将JSON对象解析为关联数组,而不是stdClass
。
然后使用foreach循环并按id映射条目:
$mappedData = [];
foreach ($data as $item) {
$mappedData[$item->id] = $item; //Or $mappedData[$item["id"]] if assoc
}
可能有一些奇特的回调方法使用
array\u map
等。但是foreach循环是最简单的(在我看来)。你能发送一个类似的URL吗https://my.infrastructure.com/api/v1/accounts/15
其中最后一部分是您注册后的帐户ID。那么API就可以只返回那个数据了?这个端点有任何参数吗?或者是否存在任何其他端点。在大多数情况下,组织良好的api能够过滤结果。如果服务器无法过滤其端的数据,则没有其他方法。在获得curl响应后,只在您的一侧进行筛选。因此您想在数组中搜索()
列()
?