找到数组中第二高的变量

sup*_*lle 2 php

我想找到数组中第二高的变量.

例如,如果我有:

$cookies = array(
                "chocolate" => "20",
                "vanilla" => "14",
                "strawberry" => "18",
                "raspberry" => "19",
                "bluebery" => "29"
);
Run Code Online (Sandbox Code Playgroud)

我可以max($cookies)用来找到最高的变量,即"bluebery" => "29".

但我如何找到第二高? "chocolate" => "20"

Ry-*_*Ry- 14

对它进行排序并获得第二项是最简单的方法:

arsort($cookies);
$keys = array_keys($cookies);

echo $keys[1]; // chocolate
echo $cookies[$keys[1]]; // 20
Run Code Online (Sandbox Code Playgroud)

如果您想要一种更有效的方式,您也可以通过同时跟踪最高和第二高的项目来手动完成:

function secondMax($arr) {
    $max = $second = 0;
    $maxKey = $secondKey = null;

    foreach($arr as $key => $value) {
        if($value > $max) {
            $second = $max;
            $secondKey = $maxKey;
            $max = $value;
            $maxKey = $key;
        } elseif($value > $second) {
            $second = $value;
            $secondKey = $key;
        }
    }

    return array($secondKey, $second);
}
Run Code Online (Sandbox Code Playgroud)

用法:

$second = secondMax($cookies);
echo "{$second[0]} => {$second[1]}"; // chocolate => 20
Run Code Online (Sandbox Code Playgroud)


Jas*_*ary 5

为了好玩,你可以使用max()两次:)

例如:

  • 复制数组
  • max()
  • 删除最大值
  • 再跑max()一次

另一种方法是根据值对数组进行排序,并获取数组的第二个元素.我很好奇哪个更快.可能是那种.