给定一个简单的数组,如
$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"));
?>