Shenmue OG
Shenmue OG

Reputation: 1

JSON nested array parse via PHP

I need to loop through and print all nested data within the "players" array and sort by "wonAmount." I can get my PHP to print out a single value, which I target, but I can't get it to work when I try the foreach loop. So instead, it prints out "array."

JSON

{
  "tournamentID": 65,
  "gameType": "Holdem",
  "name": "TRI KRALJA ZA EVROPU",
  "start": "2022-04-07 13:30:00",
  "status": "Finished",
  "buyIn": 100000,
  "entryFee": 10000,
  "guaranteedPrize": 12500000,
  "rebuyFee": 100000,
  "rebuyRake": 10000,
  "addonFee": 0,
  "addonRake": 0,
  "tableSize": 9,
  "speed": "Turbo",
  "players": [
    {
      "id": 1000000,
      "alias": "demo1",
      "rank": 1,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 6250000
    },
    {
      "id": 1000005,
      "alias": "demo6",
      "rank": 2,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 3750000
    },
    {
      "id": 1000087,
      "alias": "demo10",
      "rank": 3,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 2500000
    },
    {
      "id": 1000008,
      "alias": "demo9",
      "rank": 4,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000078,
      "alias": "demo15",
      "rank": 5,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000002,
      "alias": "demo3",
      "rank": 6,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000006,
      "alias": "demo7",
      "rank": 7,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000090,
      "alias": "demo13",
      "rank": 8,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000171,
      "alias": "demo14",
      "rank": 9,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000088,
      "alias": "okokoke",
      "rank": 10,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000007,
      "alias": "demo8",
      "rank": 11,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000086,
      "alias": "demo11",
      "rank": 12,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000004,
      "alias": "demo5",
      "rank": 13,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000001,
      "alias": "demo2",
      "rank": 14,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000003,
      "alias": "demo4",
      "rank": 15,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    },
    {
      "id": 1000077,
      "alias": "helloworld",
      "rank": 16,
      "rebuyCount": 0,
      "addonCount": 0,
      "wonAmount": 0
    }
  ]
}

Upvotes: 0

Views: 66

Answers (1)

Omar Tammam
Omar Tammam

Reputation: 1304

first, you need to decode the json using json_decode then you need to sort & print the player's array

$data = json_decode($json_data,true);

//extract the players from json 
$players = $data["players"];

//sort players array
$wonAmount = array();
foreach ($players as $key => $row)
{
    $wonAmount[$key] = $row['wonAmount'];
}
array_multisort($wonAmount, SORT_DESC, $players);


//print players data 

foreach ($players as $player)
{
    //add here any keys you want to print from player array 
    echo $player["id"]; 
}

Upvotes: 1

Related Questions