3

我有以下数组:

数组([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
)

如果这可以通过简单地重新排序数组来完成,那很好。

4

3 回答 3

11

试试这个,它会按降序对您的数组进行排序,并将您的数组切片为前 5 个值

rsort($arr);

print_r(array_slice($arr, 0 ,5));
于 2013-01-10T05:43:52.487 回答
8

使用 PHP rsort(),您可以按降序对数组进行排序。前 5 个元素是最大的:

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);

这种方法有两个警告。第一个是array-parameter是对原始的引用,所以原始数组是排序的(除非你先做一个副本,然后对副本进行排序)。第二个是它将重新索引您的数组,因此第一个索引将0不管它是否以 index 3356等开始。

UPDATE(维护索引值)
要解决数组的重新索引,您可以改用arsort(). 这将执行与上述相同的操作,但是,键不会重置为从 开始0。同样,您还需要使用第四个可选参数array_slice()来告诉它“保留键”,因为它也会重置它们。总之,您可以使用以下方法将前 5 个值放入一个新数组中:

arsort($data);
$highest_five = array_slice($data, 0, 5, true);
于 2013-01-10T05:44:17.650 回答
7

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

仅遍历列表并保留 5 个最大的列表会更快(O(n))。

于 2013-01-10T05:41:30.593 回答