【问题标题】:PHP - Combine arrays with same key valuePHP - 组合具有相同键值的数组
【发布时间】:2015-01-04 12:38:35
【问题描述】:

我有一个包含多个对象的 JSON 数组,这是一个示例:

$people = [{"name":"John", "color":"green"}, 
           {"name":"Mary", "color":"green"}, 
           {"name":"Bob", "color":"red"}]

我使用json_decode($people, true) 将它们转换为数组...

现在假设我想合并具有相同color 的那些。我必须做array_merge_recursive($people[0], $people[1]),因为他们都有green 作为color。请注意,我必须指定要递归合并的那些。

$people 解码为数组格式后如何循环并自动递归合并具有相同键值的那些?

类似这样的:

foreach($people as $person) {
    // If a person has same color of previous
    // person then merge them recursively.
}

这样我就可以在循环后得到这个:

[{"name":"John, Mary", "color":"green, green"}, 
 {"name":"Bob", "color":"red"}]

【问题讨论】:

  • 使用以颜色为键的关联数组。

标签: php arrays json object merge


【解决方案1】:

使结果数组成为以颜色为键的关联数组。

$people_by_color = array();
foreach ($people as $person) {
    if (isset($people_by_color[$person['color']])) {
        $people_by_color[$person['color']]['name'] .= ', ' . $person['name'];
        $people_by_color[$person['color']]['color'] .= ', ' . $person['color'];
    } else {
        $people_by_color[$person['color']] = $person;
    }
}
$people_by_color = array_values($people_by_color); // Turn into indexed array

【讨论】:

  • 效果很好,谢谢!顺便说一句,您错过了 if 声明中的括号。我在name 之后删除了color 行,因为我真的不想合并两个相同的值,我只是想不管是否使用array_merge_recursively,它都会合并它们。
猜你喜欢
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多