douyi1341
2017-06-08 00:06 阅读 173

PHP - 从JSON中提取数据

I have a JSON file where I'm struggling getting the data out. Here is the JSON.

{"data":[
        {"tag":"operatingrevenue","value":215639000000.0},
        {"tag":"totalrevenue","value":215639000000.0},
        {"tag":"operatingcostofrevenue","value":131376000000.0},
        {"tag":"totalcostofrevenue","value":131376000000.0},
        {"tag":"totalgrossprofit","value":84263000000.0},
        {"tag":"sgaexpense","value":14194000000.0},
        {"tag":"rdexpense","value":10045000000.0},
        {"tag":"totaloperatingexpenses","value":24239000000.0},
        {"tag":"totaloperatingincome","value":60024000000.0},
        {"tag":"otherincome","value":1348000000.0},
        {"tag":"totalotherincome","value":1348000000.0},
        {"tag":"totalpretaxincome","value":61372000000.0},
        {"tag":"incometaxexpense","value":15685000000.0},
        {"tag":"netincomecontinuing","value":45687000000.0},
        {"tag":"netincome","value":45687000000.0},
        {"tag":"netincometocommon","value":45687000000.0},
        {"tag":"weightedavebasicsharesos","value":5470820000.0},
        {"tag":"basiceps","value":8.35},
        {"tag":"weightedavedilutedsharesos","value":5500281000.0},
        {"tag":"dilutedeps","value":8.31},
        {"tag":"weightedavebasicdilutedsharesos","value":5471500000.0},
        {"tag":"basicdilutedeps","value":8.35},
        {"tag":"cashdividendspershare","value":2.18}]

I'm converting it to an array using

$data = json_decode($jsondata, true);

I can then pull the data by:

$operatingRevenue = $data['data'][0]['value'];
$totalrevenue = $data['data'][1]['value'];

etc, however, I want to use the tag name and not just the order just in case the order changes in the JSON. Something like

$operatingRevenue = $data['data']['operatingRevenue'];
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    dqq46733 dqq46733 2017-06-08 00:11

    Iterate the $data array, and set the key of a new element in the array to the tag element, and it's value to the value element.

    foreach($data['data'] as $v)
        $array[$v['tag']] = $v['value'];
    

    $array contains what you want, access like this: $array['operatingRevenue']

    点赞 评论 复制链接分享
  • dtgta48604 dtgta48604 2017-06-08 00:29

    Iterate $data and use array_push. Read it here. https://www.w3schools.com/php/func_array_push.asp

    $data = json_decode($jsondata, true);
    $datas = [];
    foreach($data['data'] as $val){
       array_push($datas,["tag"=>$val['tag'],"value"=>$val['tag']])
    }
    
    点赞 评论 复制链接分享

相关推荐