2012-03-21 13 views
14

En Python puedo usar el método "get" para obtener el valor de un diccionario sin error.PHP: obtener el valor de matriz como en Python?

a = {1: "a", 2: "b"} 
a[3] # error 
a.get(3, "") # I got empty string. 

Por lo tanto, buscar una función común/base que haga lo siguiente:

function GetItem($Arr, $Key, $Default){ 
    $res = ''; 
    if (array_key_exists($Key, $Arr)) { 
     $res = $Arr[$Key]; 
    } else { 
     $res = $Default; 
    } 
    return $res; 
} 

tener misma función básicamente en PHP como en Python?

Gracias: dd

+1

por qué necesita una función para obtener el valor usando una tecla de la matriz. $ a ['clave'] lo que está mal con este – zod

+1

@zod: si la clave no existe, se obtiene un error de PHP. El uso de una función como las que se encuentran en las respuestas a continuación le permite obtener un valor predeterminado en lugar de un mensaje de error. –

Respuesta

10

isset() es típicamente más rápido que array_key_exists(). El parámetro $default se inicializa en una cadena vacía si se omite.

function getItem($array, $key, $default = "") { 
    return isset($array[$key]) ? $array[$key] : $default; 
} 

// Call as 
$array = array("abc" => 123, "def" => 455); 
echo getItem($array, "xyz", "not here"); 
// "not here" 

Sin embargo, si existe una clave de la matriz, pero tiene un valor NULL, se isset() no se comportan de la forma esperada, ya que tratará la NULL como si no existe y volver $default. Si espera NULL s en la matriz, debe usar array_key_exists() en su lugar.

function getItem($array, $key, $default = "") { 
    return array_key_exists($key, $array) ? $array[$key] : $default; 
} 
+2

Hice otra función auxiliar que es más simple y necesita menos argumentos: http://stackoverflow.com/a/25205195/1890285 – stepmuel

0

No hay una función de base de hacer eso en mi mente.

Su GetItem es una buena manera de hacer lo que quiere hacer :)

2
No

bastante. Esto debería comportarse igual.

function GetItem($Arr, $Key, $Default = ''){ 
    if (array_key_exists($Key, $Arr)) { 
     $res = $Arr[$Key]; 
    } else { 
     $res = $Default; 
    } 
    return $res; 
} 

La primera línea en su función es inútil, ya que cada ruta de código da como resultado $res ser sobrescritos. El truco es hacer que el parámetro $Default sea opcional como se indica arriba.

Tenga en cuenta que el uso de array_key_exists() puede causar reducciones significativas, especialmente en arreglos grandes. Una alternativa:

function GetItem($Arr, $Key, $Default = '') { 
    return isset($Arr[$Key]) ? $Arr[$Key] : $Default; 
} 
0

Sí. o

function GetItem($Arr, $Key, $Default) { 
    return array_key_exists($Key, $Arr) 
     ? $Arr[$Key] 
     : $Default; 
} 
Cuestiones relacionadas