48

在 PHP 中,假设你有一个这样的关联数组:

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

我如何找到价值最低的钥匙?在这里,我正在寻找cats.

是否有一些我错过的内置 PHP 函数可以做到这一点?如果有一个解决方案可以解释几个相同的值,那就太好了,如下所示:

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

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

提前致谢。

4

6 回答 6

110

array_keys是你的朋友:

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

PS:在 SO 的某个地方有一个 dup (它有max而不是min,但我清楚地记得它)。

于 2009-10-19T12:22:12.973 回答
13

我就是这样做的。

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

array_search(min($pets), $pets); 

我希望这会有所帮助

于 2012-05-29T01:01:43.233 回答
3

可以尝试研究这些:

于 2009-10-19T12:25:42.360 回答
2
$min_val = null;
$min_key = null;
foreach($pets as $pet => $val) {
  if ($val < $min_val) {
    $min_val = $min;
    $min_key = $key;
  }
}

您还可以翻转数组并按键排序:

$flipped = array_flip($pets);
ksort($flipped);

那么第一个键是最小值,它的值就是原始数组中的键。

于 2009-10-19T12:20:57.983 回答
0

检索单个字符串的另一种方法是使用所需的排序方法key()并通过使用排序数组直接检索第一个键。在这种情况下,需要具有最低值的键,asort将从最低值到最高值排序并重置内部指针。要检索反向(从最高到最低),请使用arsort.

示例:https ://3v4l.org/5ijPh

$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"

请注意,所有 PHP 数组排序方法都会通过引用改变数组。为防止更改原始数组,请创建数组的副本或使用Iterator.

$petsSorted = $pets;
asort($petsSorted);
key($petsSorted);
于 2019-12-06T00:42:41.017 回答
-3

找到最高值

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

返回 --> 120

$array = array(100, 7, 8, 50, 155, 78);
print max($array);

返回 --> 155

找到最低值

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

返回 --> 7

$array = array(50, 7, 8, 101, 5, 78);
print min($array);

返回 --> 5

于 2011-12-21T12:42:05.357 回答