PHP多维数组中如何获取每组tahun和bulan对应的最大pembetulan值
实现方案
方法1:基础遍历实现(兼容性最好,支持所有PHP版本)
思路是遍历所有数组元素,以tahun和bulan的组合作为分组标识,每次比对同分组下的pembetulan值,只保留最大值:
<?php $data = [ ["tahun" => 2001, "bulan" => 1, "pembetulan" => 0], ["tahun" => 2002, "bulan" => 1, "pembetulan" => 0], ["tahun" => 2002, "bulan" => 1, "pembetulan" => 1], ["tahun" => 2003, "bulan" => 1, "pembetulan" => 0], ["tahun" => 2003, "bulan" => 1, "pembetulan" => 1], ["tahun" => 2003, "bulan" => 1, "pembetulan" => 2], ["tahun" => 2003, "bulan" => 1, "pembetulan" => 3], ["tahun" => 2003, "bulan" => 1, "pembetulan" => 4], ["tahun" => 2003, "bulan" => 2, "pembetulan" => 0] ]; $groupedMax = []; foreach ($data as $item) { // 用tahun和bulan拼接成分组的唯一key $key = $item['tahun'] . '_' . $item['bulan']; // 如果当前分组不存在,或者当前值比已存的更大,就更新 if (!isset($groupedMax[$key]) || $item['pembetulan'] > $groupedMax[$key]['pembetulan']) { $groupedMax[$key] = $item; } } // 可选:去掉临时key,重置为索引数组 $groupedMax = array_values($groupedMax); // 输出结果 print_r($groupedMax); ?>
输出结果:
Array ( [0] => Array ( [tahun] => 2001 [bulan] => 1 [pembetulan] => 0 ) [1] => Array ( [tahun] => 2002 [bulan] => 1 [pembetulan] => 1 ) [2] => Array ( [tahun] => 2003 [bulan] => 1 [pembetulan] => 4 ) [3] => Array ( [tahun] => 2003 [bulan] => 2 [pembetulan] => 0 ) )
方法2:用array_reduce实现(PHP 5.3+支持)
如果偏好函数式写法,可以用array_reduce实现同样逻辑,代码更简洁:
$groupedMax = array_values(array_reduce($data, function($carry, $item) { $key = $item['tahun'] . '_' . $item['bulan']; if (!isset($carry[$key]) || $item['pembetulan'] > $carry[$key]['pembetulan']) { $carry[$key] = $item; } return $carry; }, []));
两种实现逻辑完全一致,可根据代码风格选择。
内容的提问来源于stack exchange,提问作者Mukhamad Fadil
相关产品推荐
相关产品推荐

