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

时间:2015-09-24 02:36:30

标签: php arrays

给出一个像

这样的简单数组
$testarr = array("Donna"=>3, "Luke" => 4, "Pete" =>4, "Lola" => 1);

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

max($testarr);

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

2 个答案:

答案 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"));
?>