Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.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循环JSON_Php_Arrays_Json - Fatal编程技术网

使用PHP循环JSON

使用PHP循环JSON,php,arrays,json,Php,Arrays,Json,我需要在PHP中循环使用以下JSON { "page": 1, "perPage": 3, "count": 607, "status": "OK", "tickers": [ { "ticker": "A", "name": "Agilent Technologies In

我需要在PHP中循环使用以下JSON

    {
 "page": 1,
 "perPage": 3,
 "count": 607,
 "status": "OK",
 "tickers": [
  {
   "ticker": "A",
   "name": "Agilent Technologies Inc.",
   "market": "STOCKS",
   "locale": "US",
   "type": "CS",
   "currency": "USD",
   "active": true,
   "primaryExch": "NYE",
   "updated": "2020-12-15",
   "codes": {
    "cik": "0001090872",
    "figiuid": "EQ0087231700001000",
    "scfigi": "BBG001SCTQY4",
    "cfigi": "BBG000C2V3D6",
    "figi": "BBG000C2V3D6"
   },
   "url": ""
  },
  {
   "ticker": "AA",
   "name": "Alcoa Corporation",
   "market": "STOCKS",
   "locale": "US",
   "type": "CS",
   "currency": "USD",
   "active": true,
   "primaryExch": "NYE",
   "updated": "2020-12-15",
   "codes": {
    "cik": "0001675149",
    "figiuid": "EQ0000000045469815",
    "scfigi": "BBG00B3T3HF1",
    "cfigi": "BBG00B3T3HD3",
    "figi": "BBG00B3T3HD3"
   },
   "url": ""
  },
  {
   "ticker": "WADV",
   "name": "Wireless Advantage Inc Common Stock",
   "market": "STOCKS",
   "locale": "US",
   "type": "CS",
   "currency": "USD",
   "active": true,
   "primaryExch": "GREY",
   "updated": "2020-03-30",
   "codes": {
    "figiuid": "EQ0010295500001000",
    "scfigi": "BBG001S87270",
    "cfigi": "BBG000DKG4K2",
    "figi": "BBG000DKG4K2"
   },
   "url": ""
  }
 ]
}
这是我的循环函数——我只需要每个嵌套数组中的“ticker”

public function getTickers()
    {
        $APIKey = "API_KEY";
                
        $tickers_request = 'API_URL';
        $session = curl_init($tickers_request);
        curl_setopt($session, CURLOPT_HEADER, true);
        curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
                
        $response = curl_exec($session);
        curl_close($session);
            
        $json = substr($response, strpos($response, "{"));
            
        $result = json_decode($json, true);
        
        $ticker =[];
        
        foreach($result as $results)  
        {
            foreach ($results['tickers'] as $ticker)
            {
                $ticker['ticker'] = $results['ticker'];
            }
        }
        return $ticker;
        
    }
我在PHP中收到这两个错误-

A PHP Error was encountered
Severity: Warning

Message: Invalid argument supplied for foreach()

Severity: Notice

Message: Array to string conversion

我的功能有什么问题?我是一名经验丰富的PHP开发人员,但可能我遗漏了一些东西…

您提取数据的循环没有在正确的级别访问数据,您只需要一个循环,它在
tickers
数组上循环,然后将每个ticker元素添加到新数组中(不确定您希望分配的是什么)


您提取数据的循环没有访问正确级别的数据,您只需要一个循环,它在
ticker
数组上循环,然后将每个ticker元素添加到新数组中(不确定您希望分配做什么)


你的代码没有意义。首先,你不需要第一个foreach。你所需要的只是

$result = json_decode($json, true);

$tickers =[];


    foreach ($result['tickers'] as $results)
    {
        $tickers[] = $results['ticker'];
    }
    
return $tickers;
另外,您的命令$ticker['ticker']没有意义,因为它只存储1个变量。我已将其更改为$tickers[]=$results['ticker'],以将它们存储在数组中。这样做的结果如下所示:

array(3) {
  [0]=>
  string(1) "A"
  [1]=>
  string(2) "AA"
  [2]=>
  string(4) "WADV"
}

你的代码没有意义。首先,你不需要第一个foreach。你所需要的只是

$result = json_decode($json, true);

$tickers =[];


    foreach ($result['tickers'] as $results)
    {
        $tickers[] = $results['ticker'];
    }
    
return $tickers;
另外,您的命令$ticker['ticker']没有意义,因为它只存储1个变量。我已将其更改为$tickers[]=$results['ticker'],以将它们存储在数组中。这样做的结果如下所示:

array(3) {
  [0]=>
  string(1) "A"
  [1]=>
  string(2) "AA"
  [2]=>
  string(4) "WADV"
}

这是一个独特的问题吗?不要让帽子把你拖下水。@mickmackusa,IMHO不理解如何处理JSON和在哪里尝试似乎忽略了它的工作原理是有区别的。仅仅将他们指向一个通用解决方案并不总是有帮助。我是否需要发布一个冗余的
array\u column()
answer?@mickmackusa,如果您对重复的选择添加一些解释,可能会有所帮助,因为原始问题根本不包括
array\u column()
。那么,一个与访问JSON有关的问题如何与PHP 7中不工作的
array\u column()
相同呢?”这个问题在这里已经有了答案:“意味着对“replicate”的解释不像以前那么严格了。最终,堆栈溢出不需要我对每个雪花问题给出相同的答案。如果前面的答案包含解决方案,我将关闭以避免重复内容。我可以用几十页来结束这个问题(你知道的)。这是一个独特的问题吗?不要让帽子把你拖下水。@mickmackusa,IMHO不理解如何处理JSON和在哪里尝试似乎忽略了它的工作原理是有区别的。仅仅将他们指向一个通用解决方案并不总是有帮助。我是否需要发布一个冗余的
array\u column()
answer?@mickmackusa,如果您对重复的选择添加一些解释,可能会有所帮助,因为原始问题根本不包括
array\u column()
。那么,一个与访问JSON有关的问题如何与PHP 7中不工作的
array\u column()
相同呢?”这个问题在这里已经有了答案:“意味着对“replicate”的解释不像以前那么严格了。最终,堆栈溢出不需要我对每个雪花问题给出相同的答案。如果前面的答案包含解决方案,我将关闭以避免重复内容。我本可以用几十页(你知道这一点)来结束这一页。
returnarray\u列(json\u decode($response,true)['tickers','ticker')如第一次重复所示。一行,全部完成。
返回数组_列(json_decode($response,true)['tickers','ticker')如第一次重复所示。一行,全部完成。