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

PHP关联多维数组按平均值排序并提取最值元素技术求助

PHP关联多维数组按平均值排序并提取极值元素

没问题,我来帮你搞定这个PHP多维数组的处理需求!下面我会先给出完整的可运行代码,再逐段解释每个部分的作用,保证你能看懂并复用。

完整代码实现

<?php

// 示例关联多维数组(替换成你自己的业务数据即可)
$items = [
    'apple' => [8, 6, 7],
    'banana' => [3, 2, 4],
    'orange' => [9, 10, 8],
    'grape' => [5, 5, 5]
];

// 步骤1:按子数组的平均值从小到大排序,保留原关联键名
uasort($items, function($a, $b) {
    // 计算两个子数组的平均值:总和除以元素数量
    $avgA = array_sum($a) / count($a);
    $avgB = array_sum($b) / count($b);
    
    // 用太空船运算符快速比较,实现从小到大排序
    return $avgA <=> $avgB;
});

// 步骤2:提取平均值最小和最大的元素
$result = [];

// 获取排序后第一个元素(平均值最小)
reset($items); // 将数组指针移至第一个元素
$minKey = key($items); // 获取当前元素的键名
$result['min_avg'] = [
    'key' => $minKey,
    'values' => $items[$minKey],
    'average' => array_sum($items[$minKey]) / count($items[$minKey])
];

// 获取排序后最后一个元素(平均值最大)
end($items); // 将数组指针移至最后一个元素
$maxKey = key($items); // 获取当前元素的键名
$result['max_avg'] = [
    'key' => $maxKey,
    'values' => $items[$maxKey],
    'average' => array_sum($items[$maxKey]) / count($items[$maxKey])
];

// 输出结果查看
echo "排序后的完整数组:\n";
print_r($items);
echo "\n提取的最小/最大平均值元素:\n";
print_r($result);
?>

代码详细解释

1. 示例数组定义

我先定义了一个模拟业务场景的关联多维数组,每个键(比如apple)对应一个存储数值的子数组,你可以直接替换成自己的实际数据。

2. 按平均值排序

  • 这里用了uasort()函数:它是PHP专门为关联数组设计的排序函数,排序后会保留原有的键名(如果用普通的usort()会丢失键名,不适合关联数组场景)。
  • 匿名回调函数:每次传入两个待比较的子数组$a和$b,先用array_sum()计算子数组的总和,再除以count()得到平均值。
  • 太空船运算符<=>:PHP7+新增的便捷运算符,直接比较两个数值,返回-1(前者更小)、0(相等)、1(前者更大),完美适配排序回调的返回要求,实现从小到大的排序逻辑。

3. 提取最小/最大平均值元素

  • reset($items):将数组的内部指针移动到第一个元素,此时用key($items)就能拿到排序后第一个元素的键名(也就是平均值最小的元素的键)。
  • end($items):将数组的内部指针移动到最后一个元素,同理拿到平均值最大的元素的键名。
  • 最后我们把键名、原数值子数组、计算好的平均值整理成一个结构化的$result数组,方便后续业务调用。

运行结果示例

执行代码后,你会看到如下输出:

排序后的完整数组:
Array
(
    [banana] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 4
        )

    [grape] => Array
        (
            [0] => 5
            [1] => 5
            [2] => 5
        )

    [apple] => Array
        (
            [0] => 8
            [1] => 6
            [2] => 7
        )

    [orange] => Array
        (
            [0] => 9
            [1] => 10
            [2] => 8
        )

)

提取的最小/最大平均值元素:
Array
(
    [min_avg] => Array
        (
            [key] => banana
            [values] => Array
                (
                    [0] => 3
                    [1] => 2
                    [2] => 4
                )

            [average] => 3
        )

    [max_avg] => Array
        (
            [key] => orange
            [values] => Array
                (
                    [0] => 9
                    [1] => 10
                    [2] => 8
                )

            [average] => 9
        )

)

内容的提问来源于stack exchange,提问作者hoppdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:28:35