从PHP中的2d数组中获取前5个值

时间:2013-01-10 05:35:40

标签: php arrays

我有以下数组:

  

阵列([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
)

如果只需重新排序数组即可完成,那很好。

3 个答案:

答案 0 :(得分:11)

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

rsort($arr);

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

答案 1 :(得分: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,无论它是从索引33开始,56等等。

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

arsort($data);
$highest_five = array_slice($data, 0, 5, true);

答案 2 :(得分:7)

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

更快(O(n))迭代列表并保留5个最大列表。