You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:27:03