2012-06-05 8 views
8

Cuando se usa PHP, me encuentro escribiendo código como este mucho:¿Cómo eliminar una clave y devolver el valor de una matriz de PHP?

$target = $_SESSION[AFTER_LOGIN_TARGET]; 
unset($_SESSION[AFTER_LOGIN_TARGET]); 
return $target; 

En Python, hay un método dict.pop que me permitiera hacer algo similar en un comunicado, sin una variable temporal:

return session.pop(AFTER_LOGIN_TARGET) 

¿Hay una función o truco similar en PHP?

+1

sí, la array_pop de php elimina/Siempre devuelve el último elemento ... – Sebas

+0

@Sebas pero eso no es lo que Python 'dict.pop()' funciona, y es inútil en el caso descrito – lanzz

+0

lo sé, eso es lo que dije .. – Sebas

Respuesta

8

No veo una función incorporada para esto, pero puede crear fácilmente la suya propia.

/** 
* Removes an item from the array and returns its value. 
* 
* @param array $arr The input array 
* @param $key The key pointing to the desired value 
* @return The value mapped to $key or null if none 
*/ 
function array_remove(array &$arr, $key) { 
    if (array_key_exists($key, $arr)) { 
     $val = $arr[$key]; 
     unset($arr[$key]); 

     return $val; 
    } 

    return null; 
} 

Puede usarlo con cualquier matriz, p. $_SESSION:

return array_remove($_SESSION, 'AFTER_LOGIN_TARGET'); 
+0

'isset' sería suficiente. – Eugene

+0

@Eugene - 'isset' devolverá' false' si el valor es 'null', haciendo que la función deje la entrada en la matriz. –

+0

Estaba hablando de 'array_key_exists'. 'isset' sería suficiente. – Eugene

1

¿Por qué utilizar una función de ayuda? Algo así:

function getAndRemoveFromSession ($varName) { 
    $var = $_SESSION[$varName]; 
    unset($_SESSION[$varName]); 

    return $var; 
} 

Así que si usted llama

$myVar = getAndRemoveFromSession ("AFTER_LOGIN_TARGET"); 

usted tiene lo que usted pidió (probarlo un poco, no he utilizado php por muchas veces: -])

+0

'getAndRemoveFromSession'? – Eugene

+0

Sí, he cambiado el nombre a –

0

Creo que lo que busca es array_slice()

$target = array_slice(
    $_SESSION, 
    array_search('AFTER_LOGIN_TARGET', $_SESSION), 
    1 
); 
Cuestiones relacionadas