Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 Curl从JSON中查找匹配值?_Php_Arrays_Json_Curl_Multidimensional Array - Fatal编程技术网

使用PHP Curl从JSON中查找匹配值?

使用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,

因此,我有一个包含一些jSON数据的页面,我想用cURL收集到数组中。准确地说,cURL是从PHP程序使用的,而不是从命令行使用的

我可以通过下面的代码块很好地完成这一部分:

$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响应后,只在您的一侧进行筛选。因此您想在
数组中
搜索()
列()