2pourdrummer
2pourdrummer

Reputation: 45

PHP - Pull data from 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'];

Upvotes: 0

Views: 54

Answers (2)

Poldo
Poldo

Reputation: 1932

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']])
}

Upvotes: 0

Enstage
Enstage

Reputation: 2126

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']

Upvotes: 1

Related Questions