【问题标题】:merge array keys and add the values-PHP合并数组键并添加值-PHP
【发布时间】:2018-11-27 03:59:29
【问题描述】:

我想在一个数组中合并两个相同的键并得到值的总和。 我想要和现在一样的结构。因为这个数据需要转换成 JSON。

这就是我现在得到的。

{ “数据”: [{ “count_of_invites”:5, “用户”:“拉杰什”, “身份证”:“53” }, { “count_of_invites”:9, “用户”:“学生”, “身份证”:“45” }, { “count_of_invites”:4, “用户”:“学生”, “身份证”:“45” } ] }

如您所见,id 45 是重复的。正如我想要的结果一样,

预期输出 { “数据”: [{ “count_of_invites”:5, “用户”:“拉杰什”, “身份证”:“53” }, { “count_of_invites”:13, “用户”:“学生”, “身份证”:“45” } ] }

如您所见,应删除重复条目,并应添加 count_of_invites 个重复条目。

【问题讨论】:

标签: php arrays arraylist merge key


【解决方案1】:
<?php
$data = [
    [
        'id' => 2,
        'name' => 'Paul',
        'count' => 4
    ],
    [
        'id' => 3,
        'name' => 'Peter',
        'count' => 5
    ],
    [
        'id' => 3,
        'name' => 'Peter',
        'count' => 7
    ]
];

foreach($data as $array)
    $counts[$array['id']][] = $array['count'];

$counts = array_map('array_sum', $counts);
foreach($data as $k => $array)
    $data[$k]['count'] = $counts[$array['id']];

$data = array_unique($data, SORT_REGULAR);
print json_encode($data, JSON_PRETTY_PRINT);

输出:

[
    {
        "id": 2,
        "name": "Paul",
        "count": 4
    },
    {
        "id": 3,
        "name": "Peter",
        "count": 12
    }
]

【讨论】:

    【解决方案2】:

    count 方法被声明为变量,我添加了加法赋值运算符。

    感谢您的帮助。

    $ids = 数组(); $输出 = 数组();

        foreach ($response as $value) {
            if (!isset($ids[$value["id"]])) {
                $ids[$value["id"]] = count($output);
                $output[]          = $value;
            }
            else {
                $output[$ids[$value["id"]]]["count_of_invites"] += $value["count_of_invites"];
                $output[$ids[$value["id"]]]["user"]             = $value["user"];
            }
        }
    

    【讨论】:

      【解决方案3】:

      你可以这样实现:

      $ids = array();
      $output = array();
      
      foreach ($input as $value) {
          if (!isset($ids[$value["id"]])) {
              $ids[$value["id"]]=$count($output);
              $output[]=$value;
          } else {
              $output[$ids[$value["id"]]]["count_of_invites"] = $value["count_of_invites"];
              $output[$ids[$value["id"]]]["user"] = $value["user"];
          }
      }
      

      【讨论】:

      • [ { count_of_invites: 5, user: "Rajesh", id: "53" }, { count_of_invites: 4, user: "Student", id: "45", student: null } ]这是我在将其编码为 json 后得到的。作为值确实总结了
      • @KiranJB 我已经编辑了我的答案,请检查一下。错误是在 else 我使用了学生字段而不是用户字段。
      • count_of_invites 只显示最后一个数据。不是所有值的总和。我的问题是获得具有相同键且单次出现的值的总和
      • @Kiran 你能像我一小时前问的那样更新你的问题吗?我不太热衷于手动输入您的整个数组。
      • @Lajos Arpad 。对您提到的代码进行了一些编辑。但是我已经解决了问题。谢谢 Arpad。这是一个很大的帮助。我很感激。我正在发布编辑后的代码.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2014-01-31
      • 2011-01-07
      • 2017-06-26
      • 2017-02-07
      • 1970-01-01
      相关资源
      最近更新 更多