如何在php数组及其索引中获得前3个值

时间:2014-04-27 16:37:34

标签: php arrays indexing max

我希望得到最高值,第二高值和第三高值

例如,我有一个像:

这样的数组

$n = array(100,90,150,200,199,155,15,186);

我知道获取最大值及其索引的方法:

echo max($n); //200 $maxs = array_keys($n, max($n)); echo $maxs[0]; //3

我希望得到前3个值及其索引,如:value:200,199,186索引:3,4,7

我怎样才能得到它们?

5 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

function maxNitems($array, $n = 3){
    asort($array);
    return array_slice(array_reverse($array, true),0,$n, true);
}

使用类似:

maxNitems(array(100,90,150,200,199,155,15,186));

答案 1 :(得分:2)

试试这个:

$n = array(100,90,150,200,199,155,15,186);
rsort($n);
$top3 = array_slice($n, 0, 3);
echo 'Values: ';
foreach ($top3 as $key => $val) {
 echo "$val\n";
}
echo '<br>';
echo 'Keys: ';
foreach ($top3 as $key => $val) {
echo "$key\n";
}

<强>输出:

Values: 200 199 186 
Keys: 0 1 2

答案 2 :(得分:1)

$n = array(100,90,150,200,199,155,15,186);
arsort($n);

$x = 0;
while (++$x <= 3)
{
    $key = key($n);
    $value = current($n);
    next($n);
    echo "Key : " . $key . " Value  : " . $value . '<br>' ;
}

答案 3 :(得分:0)

您可以使用arsort()array_keys()函数来实现它:

  • arsort()按相反顺序对数组进行排序并维护索引关联
  • array_keys()返回所有键或数组键的子集

流程数组:

$n = array(100,90,150,200,199,155,15,186);
arsort($n);
$keys = array_keys($n);

获得前3个值:

echo $n[$keys[0]];
echo $n[$keys[1]];
echo $n[$keys[2]];

答案 4 :(得分:0)

我觉得更容易:

arsort($n);
$three = array_chunk($n, 3, true)[0];
//or
$three = array_slice($n, 0, 3, true);