在关联数组中查找最小值的键

问题描述 投票:42回答:6

在PHP中,说您有一个像这样的关联数组:

$pets = array(
    "cats" => 1,
    "dogs" => 2,
    "fish" => 3
);

我将如何找到具有最低价值的钥匙?在这里,我要寻找cats

是否有一些我想念的内置PHP函数?如果有一个解决方案可以解释几个相同的值,那也很好,如下所示:

$pets = array(
    "cats" => 1,
    "dogs" => 1,
    "fish" => 2
);

上面,我不介意它是否只是输出; catsdogs

提前感谢。

php associative-array
6个回答
92
投票

array_keys是您的朋友:

array_keys

P.S。:SO上的某处有一个dup(它是$pets = array( "cats" => 1, "dogs" => 2, "fish" => 3 ); array_keys($pets, min($pets)); # array('cats') 而不是max,但我可以清楚地记得它)。


10
投票

这就是我的做法。

min

希望对您有帮助


2
投票

可能尝试研究以下内容:

  • $pets = array( "cats" => 1, "dogs" => 2, "fish" => 3 ); array_search(min($pets), $pets);
  • natcasesort(array)

2
投票
natsort(array)

您还可以翻转数组并按键对其进行排序:

$min_val = null;
$min_key = null;
foreach($pets as $pet => $val) {
  if ($val < $min_val) {
    $min_val = $min;
    $min_key = $key;
  }
}

然后,第一个键是最小值,并且它的值是原始数组中的键。


0
投票

用于检索单个字符串的另一种方法是使用$flipped = array_flip($pets); ksort($flipped); 并通过使用已排序数组上的desirable sorting method直接检索第一个键。在这种情况下,需要具有最低值的键,key()将按从最低到最高的顺序排序并重置内部指针。要检索反向(从最高到最低),请使用key()

示例:asort

arsort
https://3v4l.org/5ijPh

请注意,所有PHP数组排序方法都会更改按引用的数组。为防止更改原始数组,请创建该数组的副本或使用$pets = array( "dogs" => 2, "cats" => 1, "fish" => 3 ); asort($pets); var_dump(key($pets)); //string(4) "cats"

$pets = array(
   "dogs" => 1,
   "cats" => 1,
   "fish" => 3
);
asort($pets);
var_dump(key($pets));
//string(4) "dogs"

-2
投票

查找最大值

Iterator

返回-> 120

Iterator

返回-> 155

查找最小值

$petsSorted = $pets;
asort($petsSorted);
key($petsSorted);

返回-> 7

print max(120, 7, 8, 50);

返回-> 5

© www.soinside.com 2019 - 2024. All rights reserved.