PHP - Obtener el nombre clave del valor de la matriz

158

Tengo una matriz como la siguiente:

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

Necesito encontrar el índice de $arr['firstStringName']para poder recorrer array_keys($arr)y devolver la cadena de clave 'firstStringName'por su índice. ¿Cómo puedo hacer eso?

dolor de cabeza
fuente
¿Puedes elaborar con un caso de uso de lo que estás tratando de lograr?
nikc.org

Respuestas:

333

Si tiene un valor y desea encontrar la clave, use array_search()así:

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

$keyahora contendrá la clave para el valor 'a'(es decir, 'first').

zrvan
fuente
21
array_filter()se puede usar si necesita devolver todos los resultados coincidentes en lugar de solo el primero, ya que conserva las claves.
Mike Lyons
55
Algo que creo que vale la pena señalar aquí: esta solución no estaba funcionando para mí, hasta que descubrí que ordenar la matriz (sort ($ arr)) elimina los nombres de las claves y recurre a los valores predeterminados de índice 0,1,2, etc. Entonces, si está ordenando, use asort (asort ($ arr)). Esto mantiene los valores clave. php.net/manual/en/function.asort.php
Rich701
63
key($arr);

devolverá el valor clave para el elemento de matriz actual

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

Mark Baker
fuente
@AnthonyRutledge Esto devolverá solo lo que el puntero interno está actualmente "señalado". Si necesitamos otra referencia, entonces deberíamos usar el método zrvans, que busca el valor solicitado, específicamente.
Parapluie
39

Si entiendo correctamente, ¿no puedes simplemente usar:

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

Ver manual PHP

rwb
fuente
Creo que está buscando la función php array_search
Junior
18

Si el nombre es dinámico, entonces debes tener algo como

$arr[$key]

lo que significaría que $ key contiene el valor de la clave.

Puede usar array_keys()para obtener TODAS las claves de una matriz, por ejemplo

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

te daría

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

Sí, de hecho, php es uno de los pocos idiomas que ofrece este tipo de soporte.

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

}
Rajat Singhal
fuente
Esta no es una respuesta relevante según la búsqueda y requiere más tiempo. Codificación menos efectiva
Rishab
13

si necesita devolver una matriz de elementos con el mismo valor, use la array_keys()función

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

Aquí hay otra opción

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

puede usar la función clave de php para obtener el nombre clave:

<?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 aquí: PHP: clave - Manual

rtroulak
fuente