说你有这个数组:
$users = [
'a' => 2,
'b' => 1,
'c' => 1,
'd' => 3
];
我需要获取具有最低值的键。因此,在这种情况下,它们将是b
和c
。
目前正在这样做:
asort($users);
$lowestValue = array_values($users)[0];
foreach ($users as $k => $v)
if ($v == $lowestValue)
$lowestUsers[$k] = $v;
print_r($lowestUsers);
这很好用,但是有更短/更有效的方法吗?
答案 0 :(得分:6)
您可以使用array_keys
查找数组中值最低的键。如果您将array_keys
的值作为第二个参数传递,它将返回一个数组,其中包含在该数组中具有该值的所有键。请注意,仅使用min
可能是获得最小值的最简单方法:
$lowestValue = min($users);
print_r(array_keys($users, $lowestValue));
输出:
Array (
[0] => b
[1] => c
)
如果您实际上希望$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
)
答案 1 :(得分:3)
您可以结合使用array_keys和min来做到这一点。无需排序或循环,
print_r(array_keys($users, min($users)));
输出
Array
(
[0] => b
[1] => c
)
工作demo。
答案 2 :(得分:2)
这对你有帮助。
$users = [
'a' => 2,
'b' => 1,
'c' => 1,
'd' => 3
];
echo array_search(min($users ), $users );
答案 3 :(得分:1)
您可以使用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);
结果:
数组( [b] => 1 [c] => 1)
答案 4 :(得分:0)
您有更多选择:
array_keys($users, $minvalue)
获得相关密钥(包括重复项)asort($users)
对数组进行排序,并使用$users[0]
获得最小值(不显示重复项)