php - php - 获取数组中的最小值并包含重复项

136 2

假设你拥有此数组:


$users = [


 'a' => 2,


 'b' => 1,


 'c' => 1,


 'd' => 3


];



我需要获得具有最小值的key。所以,在这种情况下是bc

现在这样做:


asort($users);



$lowestValue = array_values($users)[0];



foreach ($users as $k => $v)


 if ($v == $lowestValue)


 $lowestUsers[$k] = $v;



print_r($lowestUsers);



这样可以正常工作,但是有更短/更有效的方法吗?

时间: 原作者:

79 5

你可以使用array_keys查找数组中值最小的key,将array_keys作为第二个参数传递,它会返回数组中有该值的所有键的数组,注意,使用min可能是获得最小值的最简单方法:


$lowestValue = min($users);


print_r(array_keys($users, $lowestValue));



输出:


Array (


 [0] => b


 [1] => c 


)



3v4l.org的演示

如果实际上希望$users数组的元素具有最低值,可以采取array_keys的输出,并且通过array_intersect_key运行:


$lowestValue = min($users);


$lowestValueKeys = array_keys($users, $lowestValue);


$lowestUsers = array_intersect_key($users, array_flip($lowestValueKeys));


print_r($lowestUsers);



如果是这样,只使用array_filter就更简单了:


$lowestValue = min($users);


$lowestUsers = array_filter($users, function ($v) use ($lowestValue) { return $v === $lowestValue; });


print_r($lowestUsers);



两种情况下的输出是


Array (


 [b] => 1


 [c] => 1 


)



关于3v4l.org的演示

原作者:
76 1

你可以通过array_keys和min的组合来做到这一点。不需要进行排序或循环


print_r(array_keys($users, min($users)));



输出


Array


(


 [0] => b


 [1] => c


)



工作演示 。

原作者:
137 2

这个可以帮助你。


$users = [


 'a' => 2,


 'b' => 1,


 'c' => 1,


 'd' => 3


];



echo array_search(min($users ), $users );



原作者:
52 3

可以使用min()函数查找数组中的最小值,也可以使用array_filter()函数来筛选数据,例如:


$users = [


 'a' => 2,


 'b' => 1,


 'c' => 1,


 'd' => 3


];



$lowest = min($users);



$result = array_filter($users, function($value, $key) use ($lowest) {


 return $value === $lowest;


}, ARRAY_FILTER_USE_BOTH);



结果:

Array ( [b] = > 1 [c] = > 1 )

原作者:
122 0

你有更多选项:

  • 使用min()获取最小值和获取相关键的array_keys($users, $minvalue) (包括重复项)
  • 使用asort($users)对数组进行排序,并使用$users[0]获取最小值(不显示重复项),

原作者:
...