在PHP中从二维数组中获取前5个值

3
我有以下数组:

Array ( [ 20] => 154 [ 21] => 146 [ 24] => 230 [ 26] => 80 [ 33] => 232 [ 113] => 100 [ 13] => 132 [ 12] => 146 [ 11] => 122 [ 235] => 110 [ 239] => 54 [ 248] => 162 [ 340] => 84 [ 352] => 76 [ 323] => 146 [ 247] => 96 [ 372] => 150 [ 370] => 128 )

我需要从这个数组中获取前五个最大值。
最终结果应该如下所示:
Array(
     [ 33] => 232
     [ 24] => 230
     [ 248] => 162
     [ 20] => 154
     [ 372] => 150
)

如果只需通过重新排列数组即可完成此操作,那就很好。

asort(); 用于对数组进行排序。 - Arun Killu
这看起来像是一个简单的一维数组,但使用了用户定义的键而不是典型的按时间顺序排列的数字键。初始数组内没有包含另一个数组,对吧?无论如何,这并不难。 - SISYN
3个回答

12

试一下这个,它可以将你的数组按降序排序并截取前5个数值

rsort($arr);

print_r(array_slice($arr, 0 ,5));

2
这是我得到的数组([0] => 232 [1] => 230 [2] => 162 [3] => 154 [4] => 150),我还需要键值,就像这样:Array([33] => 232 [24] => 230 [248] => 162 [20] => 154 [372] => 150)。 - Ras4U
4
使用arsort($arr)。它将保留键值。 - Edwin Alex

8
使用PHP的rsort()函数,可以按降序对数组进行排序。前五个元素是最大的:
rsort($data);
$highest = $data[0];
$second_highest = $data[1];
$third_highest = $data[2];
$fourth_highest = $data[3];
$fifth_highest = $data[4];

你还可以在排序后使用 array_slice() 来将前 5 个元素剥离到它们自己的数组中(而不是像上面那样使用单独的变量):
rsort($data);
$highest_five = array_slice($data, 0, 5);

这种方法有两个注意点。第一个是数组参数是对原始数组的引用,所以原始数组会被排序(除非你先复制一份并对副本进行排序)。第二个是它将重新索引你的数组,因此无论它最初是索引33、56等,第一个索引都将是0。
更新(保留索引值) 为了解决数组重新索引的问题,您可以使用arsort()。这将执行与上述相同的操作,但键不会重置为从0开始。尽管如此,您还需要使用array_slice()的第四个可选参数来告诉它“保留键”,因为它也会重置它们。总之,您可以使用以下内容将前5个值放入新数组中:
arsort($data);
$highest_five = array_slice($data, 0, 5, true);

2
这是我得到的数组([0] => 232 [1] => 230 [2] => 162 [3] => 154 [4] => 150),我需要键值对,就像这样: Array ( [33] => 232 [24] => 230 [248] => 162 [20] => 154 [372] => 150) - Ras4U
2
@Ras4U,我已经更新了代码,展示如何避免重新索引数组。 - newfurniturey

7

对数组进行重新排序被称为排序,可以得到的“最快”操作时间是O(nlog(n)),其中n是数组中元素的数量。

通过遍历列表并保留5个最大值的列表,速度更快(O(n))。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接