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

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

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


person headacheCoder    schedule 04.01.2012    source источник
comment
Можете ли вы подробно рассказать о том, чего вы пытаетесь достичь?   -  person nikc.org    schedule 04.01.2012


Ответы (9)


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

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

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

person zrvan    schedule 04.01.2012
comment
array_filter() можно использовать, если вам нужно вернуть все совпадающие результаты, а не только первый совпавший, поскольку он сохраняет ключи. - person Mike Lyons; 27.11.2014
comment
Я думаю, здесь стоит отметить кое-что: это решение не работало для меня, пока я не обнаружил, что сортировка массива (sort ($ arr)) удаляет имена ключей и прибегает к значениям индекса по умолчанию 0,1,2 и т. Д. Поэтому, если вы сортируете, используйте asort (asort ($ arr)). Это поддерживает ключевые ценности. php.net/manual/en/function.asort.php - person Rich701; 09.03.2017

key($arr);

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

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

person Mark Baker    schedule 04.01.2012
comment
@AnthonyRutledge Это вернет только то, на что в данный момент указывает внутренний указатель. Если нам нужна другая ссылка, тогда мы должны использовать метод zrvans, который, в частности, ищет запрошенное значение. - person Parapluie; 21.11.2019

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

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

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

person rwb    schedule 04.01.2012
comment
Я думаю, он ищет php-функцию array_search - php.net/manual/en/ function.array-search.php - person Gildonei; 17.07.2014
comment
это хорошо . Благодарность - person MindRoasterMir; 02.04.2021

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

$arr[$key]

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

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

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

дал бы вам

$x = array(0 => 'a', 1 => 'c');
person Marc B    schedule 04.01.2012

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

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

}
person Rajat Singhal    schedule 04.01.2012
comment
Это нерелевантный ответ из-за поиска и требует больше времени .. Менее эффективное кодирование - person Rishab; 26.11.2019

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

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

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

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));
person aiswarya    schedule 07.05.2015

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

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

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

person jan    schedule 04.01.2012

вы можете использовать ключевую функцию 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: ключ - Руководство

person rtroulak    schedule 11.01.2017