首页 > 解决方案 > 获取数组中的最小值并包含重复项

问题描述

假设你有这个数组:

$users = [
    'a' => 2,
    'b' => 1,
    'c' => 1,
    'd' => 3
];

我需要获得具有最低值的键。所以在这种情况下,这将是band c

目前这样做是这样的:

asort($users);

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

foreach ($users as $k => $v)
    if ($v == $lowestValue)
        $lowestUsers[$k] = $v;

print_r($lowestUsers);

这很好用,但是有没有更短/更有效的方法呢?

标签: phparrays

解决方案


您可以使用它array_keys来查找数组中具有最低值的键。如果您将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 上的演示


推荐阅读