[英]Issue in php json formatting
我目前陷入php的json格式中。 我在下面給出了我的輸出json。 我需要做的是使當前json的格式成為所需的格式。 我缺少JSON格式的數組。 誰可以幫我這個事。
我的打印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);
當前格式:
{
"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"
}
}
}
}
}
所需格式:
{
"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"
}
]
}
]
}
原始響應如下:
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“] =>字符串(18)” Dal makhni燴飯“ [”“可定制”] =>字符串(1)“ 1”}}
如果要使用與JavaScript兼容的數組,則索引必須從0開始。最簡單的方法是使用array_values()
:
$final['MenuList'] = array_values($menuHead);
問題是,當添加data
項時,您需要添加它們而沒有特定的鍵,就像在$i
添加它們一樣...
$menuHead[$key]['data'][$i]['itemName']=$value['sub_category'];
這將阻止它們成為您希望的常規數組。 對於json_encode()
,數組必須從0開始,並且必須是連續的才能成為數組。
而是一次性創建它們,然后使用[]
將它們添加到現有數據的末尾。
$menuHead[$key]['data'][] = ['itemName' =>$value['sub_category'],
'price'=> $value['price'],
'description'=>$value['description'],
'itemId'=>$value['id'],
'customizable'=>$value['customizable']];
這需要使用每組相似的代碼來完成,其中包括整個數組本身,可以使用
$final['MenuList'] = array_values($menuHead);
要嘗試修復已擁有的數據,這意味着除了添加以下代碼外沒有其他更改。
foreach ( $menuHead as $menu ) {
$menu['data'] = array_values($menu['data']);
}
$final['MenuList'] = array_values($menuHead);
使用array_values();
我修復了您的代碼,它應該可以工作
$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.