json_encode产生复杂的输出

时间:2016-10-11 21:31:19

标签: php json pdo

到目前为止,我刚刚在简单的数据行上使用了PHP的json_encode(),例如

{
  "name":"bob",
  "age":"22"
}

但是我需要返回具有数组的JSON。

示例输出

{
  "success":true,
  "payload":
    {
      "venuedata":
      {
        "id":"1",
        "name":"venue name"
      },
      "menus": [
        {"menuid":"1","menuname":"food","items": [{"item":"pizza","cost":"$12.50"},{"item":"burger","cost":"$14.50"}]},
        {"menuid":"2","menuname":"drinks","items": [{"item":"pint of beer","cost":"$5.50"}]}
      ]
  }
}

现在,venuedata对象将来自一个PDO查询,菜单将来自另一个查询,每个菜单的项目将来自另一个查询。

如何使用json_encode返回示例JSON?

1 个答案:

答案 0 :(得分:1)

假设菜单项和菜单用外键相互连接的一般化示例。 创建一个菜单数组,并为数组中的每个菜单元素添加菜单项。

$arrMenus = array();
$menus = getMenusFromDB();
foreach($menus as $menu) {
    $menuItems = getMenuItemsFromDB($menu["id"]);
    $arrMenuItems = array();
    foreach($menuItems as $menuItem){
         $arrMenuItems []= array(
              "item" => $menuItem["item"],
              "cost" => $menuItem["cost"]
         );
    }

    $arrMenus []= array(
       "menuid" => $menu["id"],
       "menuname" => $menu["menuname"],
       "items" => $arrMenuItems
    );
}

然后创建一个包含其余信息的数组,并添加"菜单"数组作为"有效载荷的一部分"阵列:

$obj = array(
    "success" => true,
    "payload" => array(
        "venuedata" => array(
            "id" => "2",
            "name" => "venue name"
        ),
        "menus" => $arrMenus
    )
)

通过json_encode()转换数组后:

$json = json_encode($obj);