如何在php中进行多维foreach循环数组到json对象的转换
我正在处理数组到JSON对象代码,并希望使用JSON_encode方法输出 这是密码如何在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']),
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不再受支持。