php - 获取数组中的最小值并包含重复项
问题描述
假设你有这个数组:
$users = [
'a' => 2,
'b' => 1,
'c' => 1,
'd' => 3
];
我需要获得具有最低值的键。所以在这种情况下,这将是b
and c
。
目前这样做是这样的:
asort($users);
$lowestValue = array_values($users)[0];
foreach ($users as $k => $v)
if ($v == $lowestValue)
$lowestUsers[$k] = $v;
print_r($lowestUsers);
这很好用,但是有没有更短/更有效的方法呢?
解决方案
您可以使用它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
)
推荐阅读
- angular - Angular 5:身份验证保护自动导航到指定组件
- octave - 如何在使用 mmap() 分配的共享内存中实例化 Octave 矩阵?
- xml - Shell:如果属性不存在,则在 XML 元素中添加属性
- sql-server - 将 SQL 中的行分隔为不同的列,用破折号 (-) 和管道 (|) 分隔
- seaborn - FacetGrid Seaborn 需要很长时间才能绘制
- r - R查找超过2个向量的匹配项
- node.js - 部署节点。js 应用程序到 Azure
- common-lisp - SBCL 特定声明
- c# - 将 Double 转换为字符串(完整数字)C#
- nfc - Android Things 和 NFC