Loop through JSON array inside an array

2020-05-03 09:56发布

问题:

Previously I was using a foreach loop to access the data in my JSON object but now I have nested an array inside an array. Here is my JSON

{
  "name": "Takeaway Kings",
  "menu": [
    {
      "starter": [
        {
          "name": "Samosas",
          "price": 3.5
        },
        {
          "name": "Chaat",
          "price": 1.99
        }
      ]
    },
    {
      "dessert": [
        {
          "name": "Kulfi",
          "price": 2.5
        },
        {
          "name": "Kheer",
          "price": 2.99
        }
      ]
    },
    {
      "main": [
        {
          "name": "Lamb Biryani",
          "price": 4.5
        },
        {
          "name": "Chicken Tikka Masala",
          "price": 5.99
        }
      ]
    }
  ]
}

I am trying to loop through each array inside menu and then loop through what is in each nested array.

I was previously using this to output data before I changed the JSONObject layout.

<?php foreach($restaurant->menu->starter as $starter){
               echo '<h3>'.$starter->name.'</h3><br><p>'.$starter->price.'</p><br>'; 

           } ?>

回答1:

try below code:

$json = '{
  "name": "Takeaway Kings",
  "menu": [
    {
      "starter": [
        {
          "name": "Samosas",
          "price": 3.5
        },
        {
          "name": "Chaat",
          "price": 1.99
        }
      ]
    },
    {
      "dessert": [
        {
          "name": "Kulfi",
          "price": 2.5
        },
        {
          "name": "Kheer",
          "price": 2.99
        }
      ]
    },
    {
      "main": [
        {
          "name": "Lamb Biryani",
          "price": 4.5
        },
        {
          "name": "Chicken Tikka Masala",
          "price": 5.99
        }
      ]
    }
  ]
}';

echo '<pre>';
$json_arr = json_decode($json, true);
//print_r(call_user_func_array('array_merge',$json_arr['menu']));

echo "name: " . $json_arr['name'];
echo '<br />';
$menu_array = call_user_func_array('array_merge',$json_arr['menu']);
foreach ($menu_array as $name => $arr) {
    echo '<br />';
    echo "Menu name: " . $name;
    foreach($arr as $v){
        echo '<br />';
        echo $v['name'].' : '.$v['price'];
    }
}

output:

name: Takeaway Kings
Menu name: starter
Samosas: 3.5
Chaat: 1.99
Menu name: dessert
Kulfi: 2.5
Kheer: 2.99
Menu name: main
Lamb Biryani: 4.5
Chicken Tikka Masala: 5.99


回答2:

Please Use Below Code For use Inner Values

$data=json_decode($data);
    foreach($data->menu as $menu){
        foreach($menu as $key => $value){
            foreach($value as $key_inner => $value_inner){
                 echo '<h3>'.$value_inner->name.'</h3><br><p>'.$value_inner->price.'</p><br>';
            }
        }
    }


标签: php arrays json