php二维数组如何将key中的数据对应合并
本文将介绍如何将php二维数组中key对应的数据合并为一个值,并提供一个可用的示例代码,以帮助你轻松实现这一操作。
示例
考虑以下二维数组:
$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', ], ];
我们的目标是将categories数组中的日期范围合并,并将其对应的数据相加,最终得到一个新的数组,其中categories包含合并后的日期范围,而data包含相加后的数据。
代码实现
$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']));
代码说明
- 首先,我们将categories数组块分割为每块$chunk个元素,本例中为每块6个。
- 然后,我们使用array_reduce函数迭代每个块,并将相邻日期范围合并为字符串并存储在result[‘categories’]中。
- 此外,我们对每个块中对应的data数组元素进行求和,并将结果存储在result[‘data’]中。
- 最后,我们检查arr[‘data’]的总和是否等于result[‘data’]的总和,以验证合并后的结果是否正确。
执行以上代码后,将输出合并后的数组:
立即学习“PHP免费学习笔记(深入)”;
array(2) { ["categories"]=> array(5) { [0]=> string(11) "22-01-30/22-02-04" [1]=> string(11) "22-02-05/22-02-10" [2]=> string(11) "22-02-11/22-02-16" [3]=> string(11) "22-02-17/22-02-22" [4]=> string(11) "22-02-23/22-02-28" } ["data"]=> array(5) { [0]=> string(5) "0.00" [1]=> string(8) "5638.04" [2]=> string(5) "0.00" [3]=> string(5) "0.00" [4]=> string(10) "30402.41" } } bool(true)