PHP - получить имя ключа значения массива

158

У меня есть массив как следующее:

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'по ее индексу. Как я могу это сделать?

headacheCoder
источник
Можете ли вы привести пример использования того, чего вы пытаетесь достичь?
nikc.org

Ответы:

333

Если у вас есть значение и вы хотите найти ключ, используйте array_search()вот так:

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

$keyтеперь будет содержать ключ для значения 'a'(то есть 'first').

zrvan
источник
21
array_filter()может использоваться, если вам нужно вернуть все совпадающие результаты, а не только первый совпадающий, так как он сохраняет ключи.
Майк Лайонс
5
Что-то, на что, я думаю, стоит обратить внимание: это решение не работало для меня, пока я не обнаружил, что сортировка массива (sort ($ arr)) удаляет имена ключей и возвращает значения индекса по умолчанию 0,1,2 и т. Д. Поэтому, если вы сортируете, используйте asort (asort ($ arr)). Это поддерживает ключевые значения. php.net/manual/en/function.asort.php
Rich701
63
key($arr);

вернет значение ключа для текущего элемента массива

http://uk.php.net/manual/en/function.key.php

Марк Бейкер
источник
@AnthonyRutledge Это вернет только то, на что в данный момент указывает внутренний указатель. Если нам нужна еще одна ссылка, то нам следует использовать метод zrvans, который, в частности, ищет запрашиваемое значение.
Parapluie
39

Если я правильно понимаю, вы не можете просто использовать:

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

Смотрите руководство по PHP

РБГ
источник
Я думаю, что он ищет PHP-функцию array_search
Junior
18

Если имя динамическое, то у вас должно быть что-то вроде

$arr[$key]

что означало бы, что $ key содержит значение ключа.

Вы можете использовать, array_keys()чтобы получить ВСЕ ключи массива, например

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

даст вам

$x = array(0 => 'a', 1 => 'c');
Марк Б
источник
16

Да, вы можете сказать, что php - один из немногих языков, которые предоставляют такую ​​поддержку.

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

}
Раджат Сингхал
источник
Это не имеет значения ответа на вопрос, за поиск и больше времени .. Менее эффективное кодирование
Rishab
13

если вам нужно вернуть элементы массива с одинаковым значением, используйте array_keys()функцию

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));
Aiswarya
источник
11

Вот еще один вариант

$array = [1=>'one', 2=>'two', 3=>'there'];
$array = array_flip($array);
echo $array['one']; 
Demissew
источник
8

использование array_keys() чтобы получить массив всех уникальных ключей.

Обратите внимание, что массив с именованными ключами, такими как ваш, $arrтакже может быть доступен с помощью числовых индексов, например $arr[0].

http://php.net/manual/en/function.array-keys.php

январь
источник
4

Вы можете использовать функцию ключа php, чтобы получить имя ключа:

<?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: ключ - ручной

rtroulak
источник