给出一个像
这样的简单数组$testarr = array("Donna"=>3, "Luke" => 4, "Pete" =>4, "Lola" => 1);
如何只保留最大值? 我知道我可以做一个
max($testarr);
然后循环遍历数组,删除不同的值,但可能像array_filter一样,或者更优雅的单线程解决方案可用。
答案 0 :(得分:3)
以下是使用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)
}
请注意,closure函数引用了$max
。正如@devon所建议的那样,引用原始数组会使代码变得更短和更短。一般来说,以换取计算效率。
$only_max = array_filter($testarr,
function($item) use($testarr){
return $item == max($testarr);
});
答案 1 :(得分:2)
这将帮助您到达目的地:
<?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"));
?>