php:只保留数组中的最大值


php: Keep only max values in an array?

给定一个简单的数组,如

$testarr = array("Donna"=>3, "Luke" => 4, "Pete" =>4, "Lola" => 1);

如何只保留最大值?我知道我可以做一个

max($testarr);

,然后循环遍历数组,删除不同的值,但可能像array_filter,或者更优雅的单行解决方案是可用的。

下面是使用array_filter的一行代码:

<?php
$testarr = array("Donna"=>3, "Luke" => 4, "Pete" =>4, "Lola" => 1);
$max = max($testarr);
$only_max = array_filter($testarr, function($item) use($max){ return $item == $max; });
var_dump( $only_max );
输出:

array(2) {
  ["Luke"]=>
  int(4)
  ["Pete"]=>
  int(4)
}

注意闭包函数引用的是$max。正如@devon所建议的,引用原始数组将使代码更短&通用,以换取计算效率。

$only_max = array_filter($testarr, 
    function($item) use($testarr){ 
        return $item == max($testarr);
    });

这将带你去你需要去的地方:

<?php
function less_than_max($element)
{
    // returns whether the input element is less than max
    return($element < 10);
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array("a" => 6, "b"=>7, "c"=>8, "d"=>9, "e"=>10, "f"=>11, "g"=>12);
$max = 3;
echo "Max:'n";
print_r(array_filter($array1, "less_than_max"));
echo "Max:'n";
print_r(array_filter($array2, "less_than_max"));
?>