【问题标题】:PHP MYSQL to JSON dynamic objectPHP MYSQL 转 JSON 动态对象
【发布时间】:2021-08-30 02:03:24
【问题描述】:

这是我的表,我想用 PHP 生成这样的 json

{
  "1":
  {
    "start_time":"03:27:43","end_time":"06:27:43"
  },
  "2":
  {
    "start_time":"03:27:43","end_time":"06:27:43"
  },
  "3":
  {
    "start_time":"03:27:43","end_time":"06:27:43"
  },
  "4":
  {
    "start_time":"03:27:43","end_time":"06:27:43"
  },
  "5":
  {
    "start_time":"03:27:43","end_time":"06:27:43"
  },
  "6":
  {
    "start_time":"03:27:43","end_time":"06:27:43"
  }
}

无法将子主题放入 PHP 数组中,请您帮忙

【问题讨论】:

  • 使用表格语法代替图片。有关说明,请参阅this
  • 可以直接从数据库中取数据,然后使用json_encode转换成json。不用看你的代码我也能准确判断。
  • 到目前为止你尝试过什么?你被困在哪里了?

标签: php mysql json


【解决方案1】:

没有看到你当前的代码很难回答,但基本步骤是:

  1. 从您的 MYSQL 表中提取数据 - 建议按照 here 使用 MySql PDO
  2. 使用json_encode() PHP 函数根据here 将结果转换为JSON
  3. 将编码后的 JSON 输出到您需要的任何地方

示例代码

$db = new PDO('mysql:host='. DB_HOST .';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASS);

$stmt = $db->prepare("SELECT start_time, end_time FROM table");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo json_encode($result);

【讨论】:

  • 谢谢。唯一的问题是,如果我这样做,我不会得到对象。
【解决方案2】:

如果您有 MySQL 5.7.22 或更高版本,或者 MariaDB 10.5 或更高版本,您可以使用 JSON_OBJECTAGG()JSON_OBJECT() 函数在单个查询中完成整个工作。

例如,使用上面的表格:

select json_objectagg(week_day, json_object('start_time',start_time, 'end_time',end_time)) as json from jsonTest;

将返回此字符串:

{
"0": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}, 
"1": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}, 
"2": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}, 
"3": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}, 
"4": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}, 
"5": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}, 
"6": 
  {"end_time": "06:27:43.000000", "start_time": "03:27:43.000000"}
}

一次查询,一次获取,以您想要的形式返回一个值。无需遍历结果集以使用 PHP 将数据组装到内存中,然后对其进行 json_encode - 一切都完成了。

编辑 如果时间格式很重要,TIME_FORMAT() 是你的朋友:

select json_objectagg(week_day, json_object('start_time',time_format(start_time, '%H:%i:%s'), 'end_time',time_format(end_time,'%H:%i:%s'))) as json from jsonTest;

【讨论】:

  • 这太棒了。让我试试看能不能去掉末尾的0
  • @EhsanulKarim TIME_FORMAT() 会解决这个问题。我添加了一个示例。
【解决方案3】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多