В настоящее время я застрял в форматировании json для php. Ниже я привел свой выходной файл 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"
}
]
}
]
}
Необработанный ответ ниже:
массив (4) {[0] => массив (7) {["id"] => строка (2) "67" ["restaurant_id"] => строка (1) "5" ["category"] => string (11) "Основное блюдо" ["sub_category"] => строка (18) "Куриный тайский карри" ["price"] => строка (3) "599" ["description"] => строка (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] => массив (7) {[" id "] => строка (2)" 68 "[" restaurant_id "] => строка (1)" 5 "[" category "] => строка (12)" Закуски "[" sub_category "] => строка (8)" Моктейль "[" цена "] => строка (3) "999" ["описание"] => строка (0) "" ["настраиваемая"] => строка (1) "1"} [3] => массив (7) {["id"] => строка (2) "66" ["restaurant_id"] => строка (1) "5" ["category"] => строка (13) "Рис бирийани" ["sub_category"] => строка (17) " Ризотто с дал макни "[" price "] => строка (3)" 499 "[" descr iption "] => строка (18)" Ризотто дал махни "[" настраиваемый "] => строка (1)" 1 "}}






Проблема в том, что когда вы добавляете элементы 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);
Это решение не сработало. Есть ли другой способ сделать это?
Я добавил новый способ внизу ответа, он должен использоваться с вашим исходным кодом.
Да, я поменял его в 3-х местах
Вам может понадобиться $menuHead as &$menu, чтобы он мог обновлять исходные данные, посмотрите, поможет ли это.
foreach ($ menuHead как $ menu) {$ menu ['data'] = array_values ($ menu ['data']); } $ final ['MenuList'] = значения_массива ($ menuHead); Добавил, но не получилось
попробуйте с foreach ( $menuHead as &$menu ) (т.е. плюс &
Это как-то сработало, но теперь я столкнулся с другой проблемой. Тот же заголовок меню содержит только 2 данных. пожалуйста проверьте скриншот prntscr.com/lgkznq
Используйте 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);
Ваш код добавил массив в список меню, который отсутствовал в моем коде, но объект данных также должен быть массивом. Пожалуйста, помогите в этом
$ final ['MenuList'] = (объект) array_values ($ menuHead)
Нет, это не сработало. объект data json также должен быть массивом
Попробуй это. $ final ['MenuList'] [] = значения_массива ($ menuHead);
Массивы начинаются с 0!