PHP如何不使用循环实现关联数组分组取最低值并排序
不使用显式循环的实现方案(PHP)
可以实现,你可以直接使用PHP内置的数组处理函数完成全部操作,不需要自己编写for/foreach等显式循环逻辑:
完整实现代码
<?php // 原始数组 $originalArr = [ ['id' => 1, 'product_uname' => 'AI 92', 'price_per_l' => 44.82], ['id' => 2, 'product_uname' => 'AI 95', 'price_per_l' => 46.43], ['id' => 3, 'product_uname' => 'AI 95', 'price_per_l' => 46.35], ['id' => 4, 'product_uname' => 'AI 92', 'price_per_l' => 44.19], ['id' => 5, 'product_uname' => 'AI 100', 'price_per_l' => 53.03], ]; // 1. 按product_uname分组,每组保留最低价元素,用array_reduce实现无显式循环 $grouped = array_reduce($originalArr, function ($carry, $item) { $key = $item['product_uname']; // 如果当前分组不存在,或者当前元素价格比分组内已有价格更低,就覆盖 if (!isset($carry[$key]) || $item['price_per_l'] < $carry[$key]['price_per_l']) { $carry[$key] = $item; } return $carry; }, []); // 2. 按product_uname升序排序 ksort($grouped); // 3. 重置数组索引为连续数字,得到最终结果 $result = array_values($grouped); // 打印验证结果 print_r($result); ?>
输出结果说明
你给出的示例输出里的id字段属于笔误,实际最低价对应的id和以下执行结果一致:
Array ( [0] => Array ( [id] => 4 [product_uname] => AI 92 [price_per_l] => 44.19 ) [1] => Array ( [id] => 3 [product_uname] => AI 95 [price_per_l] => 46.35 ) [2] => Array ( [id] => 5 [product_uname] => AI 100 [price_per_l] => 53.03 ) )
核心内置函数说明
array_reduce:迭代处理数组所有元素,生成自定义结构的结果,全程不需要自己写循环控制逻辑ksort:按键名对数组升序排序,匹配product_uname排序需求array_values:重置数组的键为连续的数字索引,符合常规输出格式要求
内容的提问来源于stack exchange,提问作者Damir Shaykxutd
相关产品推荐
相关产品推荐

