【问题标题】:Merging multiple JSON objects into a single object AND adding the unequal data into this object as an array将多个 JSON 对象合并为一个对象并将不相等的数据作为数组添加到该对象中
【发布时间】:2015-09-11 20:22:05
【问题描述】:

我有一个 Laravel 连接数据库查询,它返回给我:

[
  {
    "post_id": 28,
    "site_id": 16,
    "url": "http://something.com",
    "title": "Website title",
    "post_created_at": "2015-07-06 02:40:01",
    "post_updated_at": "2015-09-08 22:33:20",
    "tag_map_id": 11,
    "tag_id": 9,
    "tag_name": "dog"
  },
  {
    "post_id": 28,
    "site_id": 16,
    "url": "http://something.com",
    "title": "Website title",
    "post_created_at": "2015-07-06 02:40:01",
    "post_updated_at": "2015-09-08 22:33:20",
    "tag_map_id": 12,
    "tag_id": 10,
    "tag_name": "cat"
  }
]

因此可以有多个具有相同 post_id 的结果,但一篇文章也可以有多个标签。

我想要的是将这些多个结果合并到一个 JSON 对象中,该对象包含数组中所有与标签相关的内容。所以每个 post_id 应该只有一个 JSON 对象。像下面的例子:

[
  {
    "post_id": 28,
    "site_id": 16,
    "url": "http://something.com",
    "title": "Website title",
    "post_created_at": "2015-07-06 02:40:01",
    "post_updated_at": "2015-09-08 22:33:20",
    "tag_map_id": [11, 12],
    "tag_id": [9, 10],
    "tag_name": ["dog", "cat"]
  }
]

如何在 PHP 中实现这种合并?

【问题讨论】:

  • 老实说,问题是我什至不知道从哪里开始。我试图将 JSON 对象转换为 PHP 数组并在那里进行合并,但我不确定这是否是最好的方法......我也不确定你是否可以在查询中实现想要的结果阶段而不是之后??
  • 从这些开始:json_encodejson_decode。它们会将您的 JSON 字符串转换为数组,因此您可以使用 PHP 内置函数更轻松地操作它们的元素,然后再次将它们转换为 JSON。试试看,告诉我们你得到了什么。

标签: php mysql json laravel


【解决方案1】:

我根本不会使用join。我会使用 Eloquent,

Post::with('tags')

然后在结果集合上使用json_encode()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 2022-11-08
    • 2018-02-09
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多