php - 使用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'];
}
解决方案
遍历数组,并使用名称作为每个元素的索引。如果该索引不存在任何元素,则将其定义为空数组。
然后您需要做的就是将字段(如果存在)添加到正确的列中。
您的问题是您正在创建一个具有太多维度的数组,而不是将每个值添加到当前计数中 - 除了您不会总是为每次迭代定义仓库和员工计数这一事实之外。
$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);
- 在https://3v4l.org/TeNKF进行现场演示