массивы — проблема в форматировании php json

В настоящее время я застрял в формате 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"}
]
}
]
}

Необработанный ответ ниже:

array (4) {[0] => array (7) {[«id»] => string (2) «67» [«restaurant_id»] => string (1) «5» [«category»] => string (11) «Основное блюдо» [«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» [«описание «] => 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 iption «] => string (18)» Dal makhni risotto «[» customizable «] => string (1)» 1 «}}

0

Решение

Если вам нужен массив, совместимый с javascript, индекс должен начинаться с 0. Самый простой способ сделать это — использовать array_values():

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

Другие решения

Проблема в том, что когда вы добавляете 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);
2

Используйте 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);
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector