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.