简体   繁体   English

PHP JSON格式问题

[英]Issue in php json formatting

I am currently stuck in json formatting for php. 我目前陷入php的json格式中。 I have given my outputted json below. 我在下面给出了我的输出json。 What I need to do is to make the format of the current json to the desired one. 我需要做的是使当前json的格式成为所需的格式。 I am missing the arrays in the JSON format. 我缺少JSON格式的数组。 Can anyone help me on this. 谁可以帮我这个事。

My code to print the json output is below: 我的打印json输出的代码如下:

$menuHead=array(); 
$i=0; 
foreach($res as $key => $value){ 
    $i=$key+1;
    //$menuHead[$i]['menuHead']=$value['category'];
    if(isset($menuHead[$key]['menuHead'])){
        if($menuHead[$key]['menuHead']==$value['category']){
          $menuHead[$key]['data'][$i]['itemName']=$value['sub_category'];
          $menuHead[$key]['data'][$i]['price']=$value['price'];
          $menuHead[$key]['data'][$i]['description']=$value['description'];
          $menuHead[$key]['data'][$i]['itemId']=$value['id'];
          $menuHead[$key]['data'][$i]['customizable']=$value['customizable'];
        }else{
          $menuHead[$i]['menuHead']=$value['category'];
          $menuHead[$i]['data'][$i]['itemName']=$value['sub_category'];  
          $menuHead[$i]['data'][$i]['price']=$value['price'];
          $menuHead[$i]['data'][$i]['description']=$value['description'];
          $menuHead[$i]['data'][$i]['itemId']=$value['id'];
          $menuHead[$i]['data'][$i]['customizable']=$value['customizable'];
        }
    }else{
      $menuHead[$i]['menuHead']=$value['category'];
      $menuHead[$i]['data'][$i]['itemName']=$value['sub_category'];  
      $menuHead[$i]['data'][$i]['price']=$value['price'];
      $menuHead[$i]['data'][$i]['description']=$value['description'];
      $menuHead[$i]['data'][$i]['itemId']=$value['id'];
      $menuHead[$i]['data'][$i]['customizable']=$value['customizable'];
    }    
}
$final['MenuList']=$menuHead;
echo json_encode($final);

Current format: 当前格式:

    {
  "MenuList": {
    "1": {
      "menuHead": "Main Course",
      "data": {
        "1": {
          "itemName": "Chicken Thai Curry",
          "price": "599",
          "description": "",
          "itemId": "67",
          "customizable": "1"
        }
      }
    },
    "2": {
      "menuHead": "Refreshments",
      "data": {
        "2": {
          "itemName": "Kingfisher Premium",
          "price": "999",
          "description": "Kingfisher beer",
          "itemId": "69",
          "customizable": "1"
        },
        "3": {
          "itemName": "Mocktail",
          "price": "999",
          "description": "",
          "itemId": "68",
          "customizable": "1"
        }
      }
    },
    "4": {
      "menuHead": "Rice biriyani",
      "data": {
        "4": {
          "itemName": "Dal makni risotto",
          "price": "499",
          "description": "Dal makhni risotto",
          "itemId": "66",
          "customizable": "1"
        }
      }
    }
  }
}

Desired Format: 所需格式:

    {
  "menuList": [
    {
      "menuHead": "In Steamer (Momos)",
      "data": [
        {
          "itemName": "Tandoori Momo",
          "description": "",
          "price": "150",
          "itemId": "16",
          "customizable": "0"
        },
        {
          "itemName": "Fried Momo Pork",
          "price": "100",
          "description": "",
          "itemId": "15",
          "customizable": "0"
        }
      ]
    },
    {
      "itemName": "Rice and Noodles",
      "data": [
        {
          "sub_category": "Tandoori Momo",
          "description": "",
          "price": "150",
          "itemId": "16",
          "customizable": "0"
        },
        {
          "itemName": "Fried Momo Pork",
          "price": "100",
          "description": "",
          "itemId": "15",
          "customizable": "0"
        }
      ]
    }
  ]
}

Raw response is below: 原始响应如下:

array(4) { [0]=> array(7) { ["id"]=> string(2) "67" ["restaurant_id"]=> string(1) "5" ["category"]=> string(11) "Main Course" ["sub_category"]=> string(18) "Chicken Thai Curry" ["price"]=> string(3) "599" ["description"]=> string(0) "" ["customizable"]=> string(1) "1" } [1]=> array(7) { ["id"]=> string(2) "69" ["restaurant_id"]=> string(1) "5" ["category"]=> string(12) "Refreshments" ["sub_category"]=> string(18) "Kingfisher Premium" ["price"]=> string(3) "999" ["description"]=> string(15) "Kingfisher beer" ["customizable"]=> string(1) "1" } [2]=> array(7) { ["id"]=> string(2) "68" ["restaurant_id"]=> string(1) "5" ["category"]=> string(12) "Refreshments" ["sub_category"]=> string(8) "Mocktail" ["price"]=> string(3) "999" ["description"]=> string(0) "" ["customizable"]=> string(1) "1" } [3]=> array(7) { ["id"]=> string(2) "66" ["restaurant_id"]=> string(1) "5" ["category"]=> string(13) "Rice biriyani" ["sub_category"]=> string(17) "Dal makni risotto" ["price"]=> string(3) "499" ["descr array(4){[0] => array(7){[“” id“] =>字符串(2)” 67“ [” restaurant_id“] =>字符串(1)” 5“ [” category“] => string(11)“主菜” [“ sub_category”] => string(18)“ Chicken Thai Curry” [“ price”] => string(3)“ 599” [“ description”] => string(0)“ “ [[” customizable“] =>字符串(1)” 1“} [1] =>数组(7){[”“ id”] =>字符串(2)“ 69” [“ restaurant_id”] =>字符串(1 )“ 5” [“ category”] =>字符串(12)“茶点” [“ sub_category”] =>字符串(18)“ Kingfisher Premium” [“ price”] =>字符串(3)“ 999” [“描述“] =>字符串(15)”翠鸟啤酒“ [”“可定制”] =>字符串(1)“ 1”} [2] => array(7){[“ id”] =>字符串(2)“ 68 “ [[” restaurant_id“] =>字符串(1)” 5“ [”类别“] =>字符串(12)”小食“ [[sub_category”] =>字符串(8)“鸡尾酒” [“价格”] => string(3)“ 999” [“ description”] => string(0)“” [“ customizable”] => string(1)“ 1”} [3] => array(7){[“ id”] =>字符串(2)“ 66” [“ restaurant_id”] =>字符串(1)“ 5” [“类别”] =>字符串(13)“ Rice biriyani” [“ sub_category”] =>字符串(17)“ Dal makni烩饭“ [” price“] => string(3)” 499“ [” descr iption"]=> string(18) "Dal makhni risotto" ["customizable"]=> string(1) "1" } } iption“] =>字符串(18)” Dal makhni烩饭“ [”“可定制”] =>字符串(1)“ 1”}}

如果要使用与JavaScript兼容的数组,则索引必须从0开始。最简单的方法是使用array_values()

$final['MenuList'] = array_values($menuHead);

The problem is that when your adding the data items, you need to add them without specific keys, as you add them with $i as in... 问题是,当添加data项时,您需要添加它们而没有特定的键,就像在$i添加它们一样...

  $menuHead[$key]['data'][$i]['itemName']=$value['sub_category'];

This will stop them being a normal array as you want it to be. 这将阻止它们成为您希望的常规数组。 For json_encode() an array must start at 0 and be sequential for it to be an array. 对于json_encode() ,数组必须从0开始,并且必须是连续的才能成为数组。

Instead create them in one go and add them to the end of the existing data using [] ... 而是一次性创建它们,然后使用[]将它们添加到现有数据的末尾。

  $menuHead[$key]['data'][] = ['itemName' =>$value['sub_category'],
                  'price'=> $value['price'],
                  'description'=>$value['description'],
                  'itemId'=>$value['id'],
                  'customizable'=>$value['customizable']];

This needs to be done with each set of similar code, which includes the overall array itself, this can be done using 这需要使用每组相似的代码来完成,其中包括整个数组本身,可以使用

$final['MenuList'] = array_values($menuHead);

To try and fix the data you already have, which means no changes except adding the following code... 要尝试修复已拥有的数据,这意味着除了添加以下代码外没有其他更改。

foreach ( $menuHead as $menu )  {
    $menu['data'] = array_values($menu['data']);
}
$final['MenuList'] = array_values($menuHead);

Use array_values(); 使用array_values();

I fixed your code, it should work 我修复了您的代码,它应该可以工作

    $menuHead=array(); 
    $i=0; 
    foreach($res as $key => $value){ 
        $i=$key+1;
        //$menuHead[$i]['menuHead']=$value['category'];
        if(isset($menuHead[$key]['menuHead'])){
            if($menuHead[$key]['menuHead']==$value['category']){
              $menuHead[$key]['data'][$i]['itemName']=$value['sub_category'];
              $menuHead[$key]['data'][$i]['price']=$value['price'];
              $menuHead[$key]['data'][$i]['description']=$value['description'];
              $menuHead[$key]['data'][$i]['itemId']=$value['id'];
              $menuHead[$key]['data'][$i]['customizable']=$value['customizable'];
            }else{
              $menuHead[$i]['menuHead']=$value['category'];
              $menuHead[$i]['data'][$i]['itemName']=$value['sub_category'];  
              $menuHead[$i]['data'][$i]['price']=$value['price'];
              $menuHead[$i]['data'][$i]['description']=$value['description'];
              $menuHead[$i]['data'][$i]['itemId']=$value['id'];
              $menuHead[$i]['data'][$i]['customizable']=$value['customizable'];
            }
        }else{
          $menuHead[$i]['menuHead']=$value['category'];
          $menuHead[$i]['data'][$i]['itemName']=$value['sub_category'];  
          $menuHead[$i]['data'][$i]['price']=$value['price'];
          $menuHead[$i]['data'][$i]['description']=$value['description'];
          $menuHead[$i]['data'][$i]['itemId']=$value['id'];
          $menuHead[$i]['data'][$i]['customizable']=$value['customizable'];
        }    
    }
// i'am use array_values()
    $final['MenuList']= array_values($menuHead);
    echo json_encode($final);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM