在PHP中从2d数组中获取前5个值
我有以下数组: 数组([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) 我需要能够从这个数组中获得前五个值 最终结果需要如下所示:在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) 我需要能够从这个数组中获得前五个值 最终结果需要如下所
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);