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

如何从PHP数组中获取排序后的前7个最大值?

解决PHP数组取前7个最大值并正确输出的问题

嘿,我看了你写的代码,思路是对的,但有几个小细节可以优化,而且输出数组的时候会遇到问题——直接echo数组会显示成Array而不是你想要的数值列表。我来帮你修正一下:

原代码的问题点

  • rsort($nilai)被放在第二个for循环里面,这会导致数组被重复排序几十次,完全没必要,排序只需要做一次就够了。
  • 输出$top7时直接echo数组,PHP会将数组转换为字符串Array,而不是你期望的逗号分隔数值。
  • 你用array_reverse(array_slice($nilai, 0,7))其实是把降序的前7个元素反转成升序,但你想要的输出是从大到小的顺序,所以这一步是多余的。

修正后的代码

<?php 
$nilai = array(72,65,73,78,75,74,90,81,87,65,55,69,72,78,79,91,100,40,67,77,86); 

// 计算平均值:用array_sum替代手动循环,更简洁
$jumlah = array_sum($nilai);
$rata = $jumlah / count($nilai); 

// 获取前7个最大值
rsort($nilai); // 对数组进行降序排序,只执行一次
$top7 = array_slice($nilai, 0, 7); // 截取前7个元素,已经是从大到小排列

// 输出结果
echo "Rata-Rata : " . number_format($rata, 2); // 格式化平均值保留两位小数,更友好
echo "<br>";
echo "Tertinggi : " . implode(',', $top7); // 用implode将数组转为逗号分隔的字符串
?>

代码说明

  1. 求和优化:用array_sum()函数直接计算数组总和,替代手动写for循环,代码更简洁易维护。
  2. 排序优化:把rsort()移到循环外,只执行一次排序,避免不必要的性能消耗。
  3. 正确输出数组:使用implode(',', $top7)将数组元素拼接成逗号分隔的字符串,这样就能得到你想要的100,91,90,87,86,81,79格式。
  4. 平均值格式化:用number_format()把平均值保留两位小数,输出更美观(比如原数组的平均值是约75.29,而不是冗长的浮点数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:12:28