我有以下数组:
阵列([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
)
如果只需重新排序数组即可完成,那很好。
答案 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个最大列表。