【问题标题】:Get top 5 values from 2d array in PHP从 PHP 中的二维数组中获取前 5 个值
【发布时间】:2013-01-10 05:35:39
【问题描述】:

我有以下数组:

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

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

【问题讨论】:

  • asort();有没有排序数组。
  • 这看起来像一个简单的一维数组,但具有用户定义的键,而不是典型的按时间顺序排列的数字键。初始数组中没有包含数组,是吗?无论哪种方式,这都不会很难。

标签: php arrays


【解决方案1】:

试试这个,它会按降序对你的数组进行排序,并将你的数组分割成前 5 个值

rsort($arr);

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

【讨论】:

  • 这里我得到了 Array ( [0] => 232 [1] => 230 [2] => 162 [3] => 154 [4] => 150 ) 像这样我也需要 Key像这样的数组([33] => 232 [24] => 230 [248] => 162 [20] => 154 [372] => 150)
  • 使用 arsort($arr)。它也将持有钥匙
【解决方案2】:

使用 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,无论它是否以索引3356 等开始。

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

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

【讨论】:

  • 这里我得到了 Array ( [0] => 232 [1] => 230 [2] => 162 [3] => 154 [4] => 150 ) 像这样我也需要 Key像这样的数组([33] => 232 [24] => 230 [248] => 162 [20] => 154 [372] => 150)
  • @Ras4U 我已经更新以展示如何防止数组被重新索引。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多