PHP - 获取数组值的键名

217

我有一个如下的数组:

function example() {
    /* some stuff here that pushes items with
        dynamically created key strings into an array */

    return array( // now lets pretend it returns the created array
        'firstStringName' => $whatEver,
        'secondStringName' => $somethingElse
    );
}

$arr = example();

// now I know that $arr contains $arr['firstStringName'];
我需要找出 $arr['firstStringName'] 的索引值,以便我能够通过循环 array_keys($arr) 并返回该键字符串 'firstStringName'。我该如何做到这一点?

1
你能举个例子说明你想要实现什么吗? - nikc.org
9个回答

452

如果您有一个值并想要找到其对应的键,可以使用 array_search() 函数,像这样:

$arr = array ('first' => 'a', 'second' => 'b', );
$key = array_search ('a', $arr);

$key现在将包含值'a'的键(也就是'first')。


29
如果你需要返回所有匹配结果而不仅仅是第一个匹配结果,并且保留键名,那么可以使用array_filter()函数。 - Mike Lyons
6
这里有一些值得注意的事情:在我的实践中,这个解决方案并没有起作用,直到我发现对数组进行排序(sort($arr))会移除关键字名称,并重新排序为默认的0、1、2等索引值。所以如果你需要排序,请使用asort(asort($arr))。这将保留关键字的值。 http://php.net/manual/zh/function.asort.php - Rich701
1
如果值不唯一怎么办? - Simon Roberts
@SimonRoberts 文档解决了你的问题:返回第一个对应的键。 - netizen

83

1
@AnthonyRutledge 这将仅返回内部指针当前“指向”的内容。如果我们需要另一个引用,则应使用zrvans方法,该方法专门查找所请求的值。 - Parapluie
@Parapluie是正确的,我利用了这一点,我只需要第一个键,这是数组指针的默认位置。如果需要,您可以使用reset($array)将指针重置到开头。 - AutoBaker

55

如果我理解正确,你不能简单地使用:

foreach($arr as $key=>$value)
{
  echo $key;
}

请参考PHP手册


1
我认为他正在寻找array_search PHP函数 - http://php.net/manual/en/function.array-search.php - Gildonei

27

这里有另一个选项

$array = [1=>'one', 2=>'two', 3=>'there'];
$array = array_flip($array);
echo $array['one']; 

26

如果名称是动态的,那么你必须有类似以下的东西:

$arr[$key]

这意味着$key包含键的值。

你可以使用array_keys()获取数组的所有键,例如:

$arr = array('a' => 'b', 'c' => 'd')
$x = array_keys($arr);

将给你

$x = array(0 => 'a', 1 => 'c');

21

是的,实际上你可以,PHP 是为数不多提供这种支持的语言之一。

foreach($arr as $key=>$value)
{

}

这不是一个相关的答案,会耗费更多时间。编码效率较低。 - Rishab

16
如果需要返回值相同的数组元素,请使用array_keys()函数。
$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));

13

8
您可以使用PHP的key函数来获取键名:
<?php
    $array = array(
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple');

    // this cycle echoes all associative array
    // key where value equals "apple"
    while ($fruit_name = current($array)) {
      if ($fruit_name == 'apple') {
        echo key($array).'<br />';
      }
    next($array);
     }
?>

就像这样:PHP:key - 手册


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