如何从相应的数组值获取数组键?

32

你可以通过如下方式轻松地通过其键名获取数组值:$value = array[$key] 但是如果我有值,想要获取它的键名,那么最好的方法是什么呢?

5个回答

69
你可以使用array_search()函数来查找第一个匹配的键。
来自手册的说明:
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;

18
你可以使用 array_keys 函数来实现这个功能。 示例:
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));

这将从数组中获取值为blue的键。

这真的是OP正在寻找的吗?我理解不同(作为对的搜索)。 - Pekka
@Pekka:让我们看看OP实际上在寻找什么,不过先举手 :) - Sarfraz
array_search和array_keys对我都有效,但是array_search可以省去从array_keys返回的数组中获取第一个值的额外步骤。因此,我将使用array_search,但是对你们两个都加1,因为它们都是好答案。 - JD Isaacks
1
这会获取数组 $array 中包含 blue 的所有 KEYS。只是给像我这样的未来谷歌搜索者提供信息。 - Cullub

5
$arr = array('mango', 'orange', 'banana');
$a = array_flip($arr);
$key = $a['orange'];

最快的方法 - 没有比较,只需将键和值交换即可。 - mana
array_flip的时间复杂度为O(n);array_search的时间复杂度也是O(n),但它会在找到值后停止搜索。 - hybris

0

没有非常简单的方法。循环遍历键,直到找到array[$key] == $value。

如果您经常这样做,请创建一个反向数组/哈希,将值映射回键。请记住,多个键可能映射到单个值。


如果你需要进行多次查找,我同意制作一个反向映射表,但肯定有一种简单的方法 - Michael Mrozek
1
@barrycarter @Michael_Mrozek,请查看array_flip。 - mmattax

0

你的数组值可能会有重复,因此它不会给你精确的键。然而,我认为可以的方法是迭代并读取键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接