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

Ras*_*s4U 3 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
)
Run Code Online (Sandbox Code Playgroud)

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

Edw*_*lex 11

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

rsort($arr);

print_r(array_slice($arr, 0 ,5));
Run Code Online (Sandbox Code Playgroud)

  • 使用arsort($ arr).它也会拿着钥匙 (4认同)
  • 这里我得到了数组([0] => 232 [1] => 230 [2] => 162 [3] => 154 [4] => 150)这样我需要Key也喜欢这个数组([33] = > 232 [24] => 230 [248] => 162 [20] => 154 [372] => 150) (2认同)

new*_*rey 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];
Run Code Online (Sandbox Code Playgroud)

您还可以使用array_slice()在排序后将前5个删除到自己的数组中(而不是像上面那样单独的变量):

rsort($data);
$highest_five = array_slice($data, 0, 5);
Run Code Online (Sandbox Code Playgroud)

这种方法有两个注意事项.第一个是array-parameter是对原始引用的引用,因此对原始数组进行排序(除非先进行复制并对副本进行排序).第二个是,它会重新索引你的阵列所以第一个指数将是0无论它开始作为指标33,56等等.

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

arsort($data);
$highest_five = array_slice($data, 0, 5, true);
Run Code Online (Sandbox Code Playgroud)

  • 这里我得到了数组([0] => 232 [1] => 230 [2] => 162 [3] => 154 [4] => 150)这样我需要Key也喜欢这个数组([33] = > 232 [24] => 230 [248] => 162 [20] => 154 [372] => 150) (2认同)
  • @ Ras4U我已经更新,以显示如何防止重新索引数组. (2认同)

cdb*_*sky 7

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

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