2012-05-05 15 views
20

Me preguntaba cuál es la mejor manera de buscar las claves en una matriz y devolver su valor. Algo así como array_search pero para las claves. ¿Sería un bucle la mejor manera?clave de matriz de búsqueda php y obtener el valor

Matriz:

Array([20120425] => 409 [20120426] => 610 [20120427] => 277 
     [20120428] => 114 [20120429] => 32 [20120430] => 304 
     [20120501] => 828 [20120502] => 803 [20120503] => 276 [20120504] => 162) 

Valor Estoy buscando: 20120504

Respuesta

50

La clave es ya el ... ehm ... clave

echo $array[20120504]; 

Si no está seguro, si la clave existe, pruébelo

$key = 20120504; 
$result = isset($array[$key]) ? $array[$key] : null; 

Además Menor:

$result = @$array[$key] ?: null; 

Se podría argumentar, que @ es malo, pero que sea grave: Esto es más fácil de leer y sencillo, no lo es?

Actualización: Con PHP7 mi ejemplo anterior es posible sin el error de silenciador

$result = $array[$key] ?? null; 
+0

como pensé, asignamos diferentes respuestas a esto. Esto funciona genial y es el más simple. –

+4

'La clave ya es la ... ehm ... clave' - esto es realmente útil :) En el calor del momento uno realmente puede olvidar lo obvio. Gracias por ahorrarme tiempo! –

3
array_search('20120504', array_keys($your_array)); 
+0

Esto solo es útil si quiere saber el índice de la clave ... – Matthew

+0

@Matthew: OP dijo: "Valor que estoy buscando: 20120504". Entonces, es una suposición segura de que él sabe lo que está buscando. –

-1

Este es un ejemplo directamente desde PHP.net

$a = array(
    "one" => 1, 
    "two" => 2, 
    "three" => 3, 
    "seventeen" => 17 
); 

foreach ($a as $k => $v) { 
    echo "\$a[$k] => $v.\n"; 
} 

en el foreach se puede hacer una comparación de cada clave de algo que está buscando

+1

¿Dónde está la comparación? –

+0

Bueno, no lo proporcioné ya que es 99% allí, pero el código en la declaración de foreach se vería así 'foreach ($ a as $ k => $ v) { if ($ a [$ k] = == '20120504') { echo "\ $ a [$ k] => $ v. \ N"; } } ' –

5
<?php 

// Checks if key exists (doesn't care about it's value). 
// @link http://php.net/manual/en/function.array-key-exists.php 
if (array_key_exists(20120504, $search_array)) { 
    echo $search_array[20120504]; 
} 

// Checks against NULL 
// @link http://php.net/manual/en/function.isset.php 
if (isset($search_array[20120504])) { 
    echo $search_array[20120504]; 
} 

// No warning or error if key doesn't exist plus checks for emptiness. 
// @link http://php.net/manual/en/function.empty.php 
if (!empty($search_array[20120504])) { 
    echo $search_array[20120504]; 
} 

?> 
Cuestiones relacionadas