【问题标题】:json_encode to produce complex outputjson_encode 产生复杂的输出
【发布时间】:2016-10-11 21:31:19
【问题描述】:

到目前为止,我只是在简单的数据行上使用了 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?

【问题讨论】:

  • 有什么问题? json_encode() 适用于嵌套数组。
  • 我怀疑您实际上是在问如何将不同查询的结果组合到一个数组中,而不是关于如何将其编码为 JSON。
  • 没错,巴马尔
  • 您需要发布执行所有查询的代码。对于菜单,您在一个查询上使用一个循环来获取每个 menuid 的信息,然后使用一个嵌套循环来获取项目并将其推送到 items 子数组中。最后,创建$result = array('success' => true, 'venuedata' => $venuerow, 'menus' => $menus); 然后对其进行编码。

标签: php json pdo


【解决方案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
    );
}

然后创建一个包含其余信息的数组,并将“menus”数组添加为“payload”数组的一部分:

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

通过json_encode()转换数组后:

$json = json_encode($obj);

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多