Obter nome da chave do valor da matriz

158

Eu tenho uma matriz da seguinte maneira:

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'];

Preciso descobrir o índice de $arr['firstStringName']para que eu possa percorrer array_keys($arr)e retornar a string de chave 'firstStringName'pelo seu índice. Como eu posso fazer isso?

headacheCoder
fonte
Você pode elaborar com um caso de uso o que você está tentando alcançar?
Nikc.org

Respostas:

333

Se você tem um valor e deseja encontrar a chave, use o array_search()seguinte:

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

$keyagora conterá a chave do valor 'a'(ou seja, 'first').

zrvan
fonte
21
array_filter()pode ser usado se você precisar retornar todos os resultados correspondentes, em vez de apenas o primeiro, pois preserva as chaves.
Mike Lyons
5
Algo que acho interessante notar aqui: esta solução não estava funcionando para mim, até que descobri que a classificação da matriz (sort ($ arr)) remove os nomes das chaves e recorre aos valores de índice padrão 0,1,2 etc. Portanto, se você estiver classificando, use asort (asort ($ arr)). Isso mantém os valores-chave. php.net/manual/en/function.asort.php
Rich701
63
key($arr);

retornará o valor da chave para o elemento atual da matriz

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

Mark Baker
fonte
@AnthonyRutledge Isso retornará apenas o que o ponteiro interno está atualmente "apontado". Se precisarmos de outra referência, devemos usar o método zrvans, que persegue o valor solicitado, especificamente.
precisa
18

Se o nome é dinâmico, você deve ter algo como

$arr[$key]

o que significa que $ key contém o valor da chave.

Você pode usar array_keys()para obter TODAS as teclas de uma matriz, por exemplo

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

te daria

$x = array(0 => 'a', 1 => 'c');
Marc B
fonte
16

Sim, você pode entender que php é um dos poucos idiomas que fornece esse suporte.

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

}
Rajat Singhal
fonte
Esta não é a resposta relevante como por pesquisa e mais demorado .. Menos eficaz de codificação
Rishab
13

se você precisar retornar elementos de uma matriz com o mesmo valor, use a array_keys()função

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));
aiswarya
fonte
11

Aqui está outra opção

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

use array_keys()para obter uma matriz de todas as chaves exclusivas.

Observe que uma matriz com chaves nomeadas como a sua $arrtambém pode ser acessada com índices numéricos, como $arr[0].

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

jan
fonte
4

você pode usar a função principal do php para obter o nome da chave:

<?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);
     }
?>

como aqui: PHP: key - Manual

rtroulak
fonte