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?


¿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').


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


@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


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

16

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

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

}

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

11

Aquí hay otra opción

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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.