dongpanshi2839 2014-07-14 17:32
浏览 6
已采纳

php在添加其他相应值时合并数组的值

I'm generating the following array in json format

[
  {
    "country": "China",
    "amount": "1"
  },
  {
    "country": "India",
    "amount": "5"
  },
  {
    "country": "India",
    "amount": "317"
  },
  {
    "country": "India",
    "amount": "8"
  },
  {
    "country": "India",
    "amount": "2"
  },
  {
    "country": "United States",
    "amount": "213"
  },
  {
    "country": "Iceland",
    "amount": "263"
  }
]

I've tried merging them with the following code

$newData = array();
    $result = array_reduce(
        $data,
        function($newData, $value) {
            $key = $value['country'];
            if (!isset($newData[$key])) {
                $newData[$key] = $value;
            } else {
                $newData[$key]['amount'] += $value['amount'];
            }
            return $newData;
        },
        $newData
    );

my desired output is

[
  {
    "country": "China",
    "amount": "1"
  },
  {
    "country": "India",
    "amount": "332"
  },
  {
    "country": "United States",
    "amount": "213"
  },
  {
    "country": "Iceland",
    "amount": "263"
  }
]

As you can see the array is merged with all the country values grouped and the amount values added accordingly.

  • 写回答

2条回答 默认 最新

  • doudou890510 2014-07-14 17:37
    关注

    Use a simple foreach loop rather than array_reduce.

    $newData = array();
    foreach ($data as $e) {
        if (isset($newData[$e['country']])) {
            $newData[$e['country']]['amount'] += $e['amount'];
        } else {
            $newData[$e['country']] = $e;
        }
    }
    $newData = array_values($newData);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分