【问题标题】:Json decode api in php foreach failing [closed]php foreach中的Json解码api失败[关闭]
【发布时间】:2014-09-14 22:03:43
【问题描述】:

几乎可以正常工作,但只是缺少一些愚蠢的东西。

大部分内容来自 Cryptsy API 示例。

变量正在被填充,但 foreach 语法有问题。

我得到的错误是 foreach($marketinfo as $marketdata){ 行上的“警告:为 foreach() 提供的参数无效”

$result = json_decode($res,true);

foreach($result as $marketinfo){
    foreach($marketinfo as $marketdata){
        $marketid = $marketdata['marketid'];
        $label = $marketdata['label'];
        $pcc = $marketdata['primary_currency_code'];
        $pc = $marketdata['primary_currency_name'];
        $scc = $marketdata['secondary_currency_code'];
        $sc = $marketdata['secondary_currency_name'];
        $cv = $marketdata['current_volume'];
    }
}

我们将不胜感激。

【问题讨论】:

  • 我认为最好在$res 中显示至少部分 JSON 字符串的内容,以说明您想要实现的目标。
  • 第二个foreach循环需要什么?只需使用第一个,因为它的作用完全相同
  • 确保$marketinfo 是一个数组而不是字符串。您可能只需要执行一个foreach() 循环。

标签: php json foreach


【解决方案1】:

您需要找出 $marketinfo 是什么类型。使用is_array() 和/或gettype(),例如:

$result = json_decode($res,true);

try {
foreach($result as $key=>$marketinfo){
    if(is_array($marketinfo)){
       foreach($marketinfo as $marketdata){
           $marketid = $marketdata['marketid'];
           $label = $marketdata['label'];
           $pcc = $marketdata['primary_currency_code'];
           $pc = $marketdata['primary_currency_name'];
           $scc = $marketdata['secondary_currency_code'];
           $sc = $marketdata['secondary_currency_name'];
           $cv = $marketdata['current_volume'];
       }
    }else{
       throw new Exception($key . ' $marketinfo is not an array, is '.gettype($marketinfo));
    }
}
}catch(Exception $e){
   echo $e->getMessage();
}

【讨论】:

  • 好的,看起来每个人都是对的,$marketinfo 是一个字符串。我假设我需要第二个 foreach 来处理 json_decode 输出的嵌套数组。
  • 好的,看起来每个人都是对的,$marketinfo 是一个字符串。我假设我需要第二个 foreach 来处理 json_decode 输出的嵌套数组。 json_decode 之前的 $res 看起来像字符串 '{"success":"1","re​​turn":[{"marketid":"141","label":"42\/BTC","primary_currency_code":"42 ","primary_currency_name":"42Coin","secondary_currency_code":"BTC","secondary_currency_name":
【解决方案2】:

最可能的问题是$marketinfo 不是一个数组。

echoprint_r() $marketinfo 在使用 foreach 循环之前确认其内容是一个数组。

【讨论】:

  • 看来 marketinfo 没问题,print_r 输出是 Array ( [0] => Array ( [marketid] => 141 [label] => 42/BTC ) [1] => Array ( [ marketid] => 199 [标签] => AC/BTC
  • @RobH71 你在print_r() $marketinfo 在外部foreach 循环内吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多