
php 二维数组中指定键对应的值合并
给定一个二维数组,任务是将指定键对应的值合并,合并后的数组与原数组相比,数据总和不变。
示例数据
$arr = [
'categories' => [
'22-01-30',
'22-01-31',
'22-02-01',
'22-02-02',
'22-02-03',
'22-02-04',
'22-02-05',
'22-02-06',
'22-02-07',
'22-02-08',
'22-02-09',
'22-02-10',
'22-02-11',
'22-02-12',
'22-02-13',
'22-02-14',
'22-02-15',
'22-02-16',
'22-02-17',
'22-02-18',
'22-02-19',
'22-02-20',
'22-02-21',
'22-02-22',
'22-02-23',
'22-02-24',
'22-02-25',
'22-02-26',
'22-02-27',
'22-02-28',
],
'data' => [
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'5638.04',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'0.00',
'25915.99',
'1606.44',
'1676.90',
'0.00',
'0.00',
'1203.08',
],
];立即学习“PHP免费学习笔记(深入)”;
可以使用 array_chunk() 和 array_reduce() 函数组合完成。
$chunk = 6;
$result = array_reduce(array_chunk($arr['categories'], $chunk), function ($result, $current) use ($chunk, $arr) {
$start = current($current);
$end = end($current);
$result['categories'][] = $start . '/' . $end;
$count = count($result['categories'] ?? []);
$result['data'][] = array_sum(array_slice($arr['data'] ?? [], $count * $chunk, $chunk));
return $result;
}, ['categories' => [], 'data' => []]);说明
这样,就可以得到合并后的结果数组 $result,其中 categories 键保存的是日期范围,data 键保存的是对应日期范围的总和值。
演示
将上面的示例数据输入到代码中,得到以下结果:
array(2) {
["categories"]=>
array(5) {
[0]=>
string(8) "22-01-30/22-02-04"
[1]=>
string(8) "22-02-05/22-02-10"
[2]=>
string(8) "22-02-11/22-02-16"
[3]=>
string(8) "22-02-17/22-02-22"
[4]=>
string(8) "22-02-23/22-02-28"
}
["data"]=>
array(5) {
[0]=>
float(0)
[1]=>
float(5638.04)
[2]=>
float(0)
[3]=>
float(0)
[4]=>
float(30402.41)
}
}可以看出,总和值保持不变:
array_sum($arr['data']) === array_sum($result['data']) // true
以上就是如何用PHP高效合并二维数组中指定键对应的值,并保持数据总和不变?的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号