从数组中获取最高值

时间:2016-07-03 16:58:18

标签: php arrays

我有一个存储在变量$ data中的数组。该数组在第一行中具有名称,在第二行中具有值。数组非常大,所以我需要一种方法从它获取五个最高值和这些值的名称。例如,我有这个数组:

[0]=>
    array(1447) {
      [1]=>
      array(3) {
        [0]=>
        string(11) "Cris"
        [2]=>
        string(1) "11"
      }
      [2]=>
      array(3) {
        [0]=>
        string(7) "Alan"
        [2]=>
        string(1) "28"
      }
      [3]=>
      array(3) {
        [0]=>
        string(6) "Alex"
        [2]=>
        string(1) "50"
      }
      [4]=>
      array(3) {
        [0]=>
        string(6) "Zone"
        [1]=>
        string(1) "22"
      }
      [5]=>
      array(3) {
        [0]=>
        string(6) "Ana"
        [2]=>
        string(1) "1"
      }
      [6]=>
      array(3) {
        [0]=>
        string(6) "Fisca"
        [1]=>
        string(1) "5"
      }

在这种情况下,我应该显示:Alex 50,Alan 28,Zone 22,Cris 11和Fisca 5.我试图找到一个解决方案,但我不知道如何制作数组值的顶部。你能帮我吗?提前谢谢。

4 个答案:

答案 0 :(得分:0)

首先对数组进行排序,然后对前5位进行排序

DEMO

usort($data, function ($a, $b) {
    return $b[1] - $a[1];
});   //Sort your array

$resultant = array_slice($data,0,5);  //Pick top 5

注意:如果用于比较的索引不同,请将return语句更改为:

return (isset($b[1])?$b[1]:$b[2]) - (isset($a[1])?$a[1]:$a[2]);

示例

<?php

$data = [
['Cris', 11],
['Alan', 28],
['Alex', 50],
['Zone', 22],
['Ana', 1]
];

usort($data, function ($a, $b) {
    return $b[1] - $a[1];
});

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

<强>结果

Array
(
    [0] => Array
        (
            [0] => Alex
            [1] => 50
        )

    [1] => Array
        (
            [0] => Alan
            [1] => 28
        )

    [2] => Array
        (
            [0] => Zone
            [1] => 22
        )

    [3] => Array
        (
            [0] => Cris
            [1] => 11
        )

    [4] => Array
        (
            [0] => Ana
            [1] => 1
        )

)

DEMO

答案 1 :(得分:0)

您可以使用它来获取数组的5个最高值:

<?php
function compare($a, $b) {
    if ($a[1] == $b[1]) {
        return 0;
    }

    return ($a[1] > $b[1]) ? -1 : 1;
}

usort($theBigArray, "compare");

$fiveHighestValues = array_slice($theBigArray, 0, 5);
?>

$theBigArray是你的阵列)

然后,您可以遍历$fiveHighestValues var以显示所需的五个元素,例如:

<?php
foreach($fiveHighestValues as $value) {
    echo $value[0] .' has the value '. $value[1];
    // output: Alex has the value 50
}
?>

答案 2 :(得分:0)

我首先要像这样排序数组

function mySort($a, $b) {
    return $b[1] - $a[1];
}
usort($arr, 'mySort');

然后你可以弹出前5个值 - 它们是最高的。 你已经写过'数组在第一行有名字而在第二行有一个值。'但我可以看到,对于'Zone',索引'1'设置为'2',所以在你的排序函数中你可能需要添加一些简单的检查,可能是这样的:

function mySortWithCheck($a, $b) {
   if (isset($b[1])) {
       $valB = $b[1]; 
   } else {
       $valB = $b[2];
   }

   if (isset($a[1])) {
       $valA = $a[1]; 
   } else {
       $valA = $a[2];
   }

   return $valB - $valA;
}

答案 3 :(得分:0)

<?php
$data = array(
           array("Cris", "11"),
           array("Alan",  "28"),
           array("Alex","50"),
           array("Zone","22"),
           array("Ana","1")
        );

var_dump($data);

function custom_array_sort($a, $b) {
    return $b[1] - $a[1];
}

usort($data,'custom_array_sort');

$sorted = array_slice($data,0,5);
var_dump($sorted);

?>