如何在php中进行多维foreach循环数组到json对象的转换

如何在php中进行多维foreach循环数组到json对象的转换,php,arrays,json,Php,Arrays,Json,我正在处理数组到JSON对象代码,并希望使用JSON_encode方法输出 这是密码 foreach($servicecategory as $servicecategory1) { $getcat = $objcat->Get_Category($servicecategory1); $employee = array( 'category_id'=>mysql_real_escape_string($getcat['id']),

我正在处理数组到JSON对象代码,并希望使用JSON_encode方法输出

这是密码

foreach($servicecategory as $servicecategory1) {
    $getcat = $objcat->Get_Category($servicecategory1);
    $employee = array(
            'category_id'=>mysql_real_escape_string($getcat['id']),
            'category_name'=>mysql_real_escape_string($getcat['catname']),
            'category_image_url'=>"",   
            'subcategory'=>array()
    );

    $getsubcat = $objcat->getCategoriesAdminNew($servicecategory1);

    foreach($getsubcat as $getsubcat1) {
        $getcat = $objcat->Get_Category($getsubcat1['id']); 
        $employee['subcategory'][]= array(
                'category_id'=>mysql_real_escape_string($getcat['id']),                                     
                'category_name'=>mysql_real_escape_string($getcat['catname']),
                'vendor_products_details' =>array()
        );

        $getproduct = $objuser->VendorProductDetailsNew2($userinfo['profile_id'],$getcat['id']);
        foreach($getproduct as $getproducts){
            $getcat = $objcat->Get_Category($getproducts['subcat_id']);
            $employee['vendor_products_details'][] = array(
                'product_id' => $getproducts['id'],
                'product_name' => $getproducts['pname'],
                'Price' => $getproducts['price'],
            );
        }
    }

    $data[] = $employee;
}

if($userinfo!='') {
    $infodatas=array("status"=>"success","vendor_detail"=> array($array1, $data));

    $ress=json_encode($infodatas);
    echo  $ress ;
}
它显示如下输出,这不是json输出的正确格式

  {
    "category_id": "1",
    "category_name": "Dry Cleaning",
    "category_image_url":"",
    "subcategory": [
      {
        "sub_category_id": "4",
        "sub_category_name": "Men",
        "vendor_products_details": [

        ]
      },
      {
        "sub_category_id": "5",
        "sub_category_name": "Women",
        "vendor_products_details": [

        ]
      }

    ],
    "vendor_products_details": [
      {
        "product_id": "19",
        "product_name": "T Shirt",
        "Price": "20"
      },
      {
        "product_id": "20",
        "product_name": "Top",
        "Price": "15"
      }

    ]
  },
但我希望输出的格式如下,每个循环使用多个

  {
    "category_id": "1",
    "category_name": "Dry Cleaning",
    "category_image_url": "",
    "subcategory": [
      {
        "sub_category_id": "4",
        "sub_category_name": "Men",
        "vendor_products_details": [
          {
        "product_id": "19",
        "product_name": "T Shirt",
        "Price": "20"
      },
      {
        "product_id": "20",
        "product_name": "Top",
        "Price": "15"
      }
        ]
      },
      {
        "sub_category_id": "5",
        "sub_category_name": "Men",
        "vendor_products_details": "Women",
        "vendor_products_details": [
          {
        "product_id": "18",
        "product_name": "T shirt",
        "Price": "15"
      },
      {
        "product_id": "9",
        "product_name": "Bedsheet",
        "Price": "15"
      }
        ]
      }


    ]

  },

对于每个主要类别都是一样的

您当前的foreachloop声明,在获取产品部分,它应该添加到$employee['vendor\u products\u details'][],但是您的解释声明您希望产品位于您的子类别之下。这可以通过两个小改动来实现:

foreach($getsubcat as $getsubcat1) {
    $getcat = $objcat->Get_Category($getsubcat1['id']);
    $employee['subcategory'][$getsubcat1['id']]= array(
        'category_id'=>mysql_real_escape_string($getcat['id']),
        'category_name'=>mysql_real_escape_string($getcat['catname']),
        'vendor_products_details' =>array()
    );

    $getproduct = $objuser->VendorProductDetailsNew2($userinfo['profile_id'],$getcat['id']);
    foreach($getproduct as $getproducts){
        $getcat = $objcat->Get_Category($getproducts['subcat_id']);
        $employee['subcategory'][$getsubcat1['id']]['vendor_products_details'][] = array(
            'product_id' => $getproducts['id'],
            'product_name' => $getproducts['pname'],
            'Price' => $getproducts['price'],
        );
    }
}
发生了什么变化: 在使用$getsubcat的foreachloop中,需要将数组更改为:

$employee['subcategory'][$getsubcat1['id']]= array(............);
$employee['subcategory'][$getsubcat1['id']]['vendor_products_details'][] = array(............);
在使用$getproduct的foreachloop中,需要将数组更改为:

$employee['subcategory'][$getsubcat1['id']]= array(............);
$employee['subcategory'][$getsubcat1['id']]['vendor_products_details'][] = array(............);

通过这种方式,您的供应商产品详细信息将嵌套在您的子类别中,并带有在该特定循环中使用的id。

谢谢Fabian的帮助,上面的代码将打印以下输出{“category_id”:“1”,“category_name”:“Dry Cleaning”,“category_image_url”:“subcategory”:{“4”:{“类别id”:“4”,“类别名称”:“男性”,“供应商产品详细信息”:[{“产品id”:“19”,“产品名称”:“T恤”,“价格”:“20”}]},是否可以删除“4”:来自子类别部分,并保持不变。我个人会将ID保留在那里,以便您可以在其他函数调用中重复使用它。但是这确实是可能的,但4将需要一个类似名称之类的替换项。如果您未指明子类别的键,则您的代码将无法看到哪些信息相互链接。您将有l同一数组中的类别id、名称和供应商详细信息。如果您确实希望将其删除,您只需检查我在“更改内容”部分中添加“$getsubcat1['id']”的位置并将其删除。如果您想要子类别名称,只需将$getsubcat1['id']编辑为$getsubcat1['…]]这是否回答了您的问题?警告:
mysql\u*
扩展从PHP 5.5.0开始就被弃用,从PHP 7.0.0开始被删除。相反,应该使用或扩展。选择mysql API时,请参阅以获取更多帮助。如果您仍然使用PHP 5,我强烈建议尽快升级。此版本为no不再受支持。