2016-07-03 78 views
0

我有一个数组存储在变量$ 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" 
     } 

在这种情况下,我应该显示:亚历克斯·50,阿伦28区,22区,11克里斯和Fisca 5.我试图找到一个解决办法,但我不知道应该怎样我做了数组值的顶部。你能帮我吗?先谢谢你。

+0

看看这里:http://stackoverflow.com/q/2699086/3129708 – postrel

+0

谢谢你,但我想显示只有五个最高值...作为纯文本以及除此之外的具体数字。我不想对数组进行排序......它有意义吗?抱歉,我是后台新手。 – Alan

+0

任务流将是:1.对数组进行排序2.提取5个元素。 – postrel

回答

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

+0

谢谢你解决了我的问题。并感谢大家的帮助! :) – Alan

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 
} 
?> 
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; 
} 
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); 

?>