如何从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将数组转为逗号分隔的字符串 ?>
代码说明
- 求和优化:用
array_sum()函数直接计算数组总和,替代手动写for循环,代码更简洁易维护。 - 排序优化:把
rsort()移到循环外,只执行一次排序,避免不必要的性能消耗。 - 正确输出数组:使用
implode(',', $top7)将数组元素拼接成逗号分隔的字符串,这样就能得到你想要的100,91,90,87,86,81,79格式。 - 平均值格式化:用
number_format()把平均值保留两位小数,输出更美观(比如原数组的平均值是约75.29,而不是冗长的浮点数)。
内容的提问来源于stack exchange,提问作者Marfino Hamzah
相关产品推荐
相关产品推荐

