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

在PHP中从2d数组中获取前5个值,php,arrays,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) 我需要能够从这个数组中获得前五个值 最终结果需要如下所

我有以下数组:

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

如果可以通过简单地对数组重新排序来实现这一点,那就可以了。

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


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

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

rsort($arr);

print_r(array_slice($arr, 0 ,5));
使用PHP,可以按降序对数组进行排序。前5个元素是最大的:

rsort($data);
$highest = $data[0];
$second_highest = $data[1];
$third_highest = $data[2];
$fourth_highest = $data[3];
$fifth_highest = $data[4];
您还可以使用在排序后将前5名剥离到它们自己的数组中(而不是像上面那样单独的变量):

这种方法有两个警告。第一个是数组参数是对原始数组的引用,因此对原始数组进行排序(除非先创建副本并对副本进行排序)。第二个是它将重新索引数组,因此第一个索引将是
0
,而不管它是以索引
33
56
等形式开始的

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

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

asort();它看起来像一个简单的一维数组,但是有用户定义的键,而不是典型的按时间顺序排列的数字键。初始数组中没有包含数组,是吗?无论哪种方式,这都不是很难。这里我得到了数组([0]=>232[1]=>230[2]=>162[3]=>154[4]=>150)像这样我需要键也像这个数组([33]=>232[24]=>230[248]=>162[20]=>154[372]=>150)使用arsort($arr)。在我得到数组([0]=>232[1]=>230[2]=>162[3]=>154[4]=>150)像这样之前,它也会保存这些键。我需要像这个数组一样的键([33]=>232[24]=>230[248]=>162[20]=>154[372]=>150)@Ras4U,我已经更新以显示如何防止数组被重新索引。
arsort($data);
$highest_five = array_slice($data, 0, 5, true);