首页 > 解决方案 > 使用PHP中的字段组合两个数组

问题描述

我有一个数组,我想将公共字段组合在一起。这样通用名称就会组合在一起,并且它们包含该特定名称的通用值。下面是我的数组

[
  [
    count_employee: 2,
    name: "Harry"
  ],
  [
    count_employee: 61,
    name: "Jack"
  ],
  [
    count_employee: 11,
    name: "John"
  ],
  [
    count_warehouse: 1,
    name: "Harry"
  ],
  [
    count_warehouse: 77,
    name: "John"
  ],
  [
    count_warehouse: 45,
    name: "Jack"
  ]
]

我希望输出是

[
  [
    name: "Harry",
    count_employee:2
    count_warehouse:1
  ],
  [
    name: "Jack",
    count_employee: 61
    count_warehouse: 45
  ],
  [
    name: "John",
    count_employee:11
    count_warehouse:77
  ],
]

到目前为止,我已经尝试过了

foreach ($data as $key => $value) {
      $group[$value['name']]['name'] = $value['name'];
      $group[$value['name']][$key]['count_employee'] = $value['count_employee'];
      $group[$value['name']][$key]['count_warehouse'] = $value['count_warehouse'];
}

标签: phparrays

解决方案


遍历数组,并使用名称作为每个元素的索引。如果该索引不存在任何元素,则将其定义为空数组。

然后您需要做的就是将字段(如果存在)添加到正确的列中。

您的问题是您正在创建一个具有太多维度的数组,而不是将每个值添加到当前计数中 - 除了您不会总是为每次迭代定义仓库和员工计数这一事实之外。

$result = [];
foreach ($arr as $v) {
    // Initialize the person
    if (!isset($result[$v['name']])) {
        $result[$v['name']] = ["name" => $v['name'], "count_employee" => 0, "count_warehouse" => 0];
    }
    // Add values
    if (isset($v['count_employee']))
        $result[$v['name']]['count_employee'] += $v['count_employee'];
    if (isset($v['count_warehouse']))
        $result[$v['name']]['count_warehouse'] += $v['count_warehouse'];
}
// print_r($result);

推荐阅读