利用数组分组和归并求和实现键重叠二维数组数据的合并
给定一个带有多维键的关联数组,需要将其按指定分组规则合并,形成新的键重叠数组。具体来说,当指定分组长度为6时,原数组中的键值需按如下规则分组并合并:
- 对于小于6个的键,直接保存在新数组中;
- 对于大于6个的键,将其按6个一组进行分组,并分别合并每个组内的键值(求和),以“开始日期 / 结束日期”的形式存储键值。
解决方案
我们可以利用php中的array_chunk函数将原数组按照指定的长度进行分组,再结合array_reduce函数实现组内数据的求和:
$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', ], ]; $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' => []]); var_dump($result, array_sum($arr['data']) === array_sum($result['data']));
登录后复制
在上述代码中:
- array_chunk函数将$arr['categories']数组按6个为一组进行分组,返回一个二维数组。
-
array_reduce函数对分组后的数组进行遍历,并按如下规则执行:
- 获取每一组的第一个元素作为开始日期,最后一个元素作为结束日期,拼接为“开始日期/结束日期”的格式,保存到$result['categories']中。
- 计算当前组在$arr['categories']中的位置,用$count变量表示。
- 从$arr['data']中截取从$count * $chunk开始的$chunk个元素,将其求和并保存到$result['data']中。
- var_dump函数同时打印合并后的$result数组和原始$arr数据之和是否相等,以验证数据的正确性。
以上就是利用数组分组和归并求和如何实现键重叠二维数组数据的合并?的详细内容,更多请关注抖狐科技其它相关文章!
-
java数组怎么累加
java 数组累加有多种方法:使用增强型 for 循环累加数组元素;使用传统 for 循环依次累加数组元素;使用 arrays.stream() 函数求和。Java 数组累加 为了在 Java 中累加...
-
大侠立志传三教传人怎么入队 三教传人邀请入队方法
《大侠立志传》中,三教传人是一群独具特色的关键人物。对于希望招募他们的玩家来说,如何入队至关重要。这篇指南由php小编百草精心撰写,将详细介绍三教传人的邀请入队方法,帮助玩家在游戏中达成目标。大侠立志...
-
崩坏星穹铁道没什么好怕的成就怎么做 崩坏星穹铁道没什么好怕的成就攻略
崩坏星穹铁道中的“没什么好怕的”成就有没有困扰你?这款游戏以其超高制作成本、精美画面和独特机制吸引了众多玩家,但这一成就却让不少人头疼不已。本篇文章将由php小编西瓜为你详细解答,教你如何轻松拿下“没...
-
红警2共和国之电脑辉变态补丁
各位网友大家好,php小编香蕉为大家带来一篇红警2共和国之辉变态补丁的内容,这款补丁是一款专门为红色警戒2共和国之辉修改的补丁,其中包含了非常多的修改内容,比如游戏难度、操作方式、游戏画面等等,感兴趣...
-
如何使用 QueryRunner 获取内部类数据?
queryrunner 中内部类返回不为 null 的方法 开发者在数据库操作中,可能遇到这样的需求:在查询过程中,需要获取某个类中的内部类数据,但使用 queryrunner 时,返回的结果中的内部...