gpt4 book ai didi

php - 搜索重复项,如果找到总和值

转载 作者:可可西里 更新时间:2023-10-31 23:00:42 29 4
gpt4 key购买 nike

我有这个数组:

$data = [
0 => [
'date' => '2018-09-12',
'department' => 12,
'country' => 14,
'total' => 12
],
1 => [
'date' => '2018-09-12',
'department' => 12,
'country' => 14,
'total' => 18
],
2 => [
'date' => '2018-09-12',
'department' => 12,
'country' => 15,
'total' => 10
]
];

返回应该是:

$return = [
0 => [
'date' => '2018-09-12',
'department' => 12,
'country' => 14,
'total' => 30
],
1 => [
'date' => '2018-09-12',
'department' => 12,
'country' => 15,
'total' => 10
]
];

我试过这样的:

foreach ($data as $value) {
if(!in_array($value, $data)) {
$result[] = $data;
}
}

想法是,如果除总计之外的所有字段都相同,则将总计添加到具有相同字段的现有总计。请帮我。提前致谢,对不起我的英语

最佳答案

您可以通过遍历数组,比较每个元素的所有其他值(datedepartmentcountry)之前看到的值,并在匹配时对总数求和。此代码使用 serialize生成其他值的复合键以进行比较:

$output = array();
$keys = array();
foreach ($data as $value) {
$total = $value['total'];
unset($value['total']);
$key = serialize($value);
if (($k = array_search($key, $keys)) !== false) {
$output[$k]['total'] += $total;
}
else {
$keys[] = $key;
$output[] = array_merge($value, array('total' => $total));
}
}
print_r($output);

输出:

Array (
[0] => Array (
[date] => 2018-09-12
[department] => 12
[country] => 14
[total] => 30
)
[1] => Array (
[date] => 2018-09-12
[department] => 12
[country] => 15
[total] => 10
)
)

Demo on 3v4l.org

通过使用复合键作为$output数组的索引,我们可以简化这段代码,我们只需要使用array_values在循环之后重新索引 $output 数组:

$output = array();
foreach ($data as $value) {
$v = $value;
unset($v['total']);
$key = serialize($v);
if (isset($output[$key])) {
$output[$key]['total'] += $value['total'];
}
else {
$output[$key] = $value;
}
}
$output = array_values($output);
print_r($output);

输出与之前相同。 Demo on 3v4l.org

关于php - 搜索重复项,如果找到总和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55280844/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com