2012-06-05 7 views
8

Quando si utilizza PHP, mi ritrovo a scrivere codice come questo molto:Come eliminare una chiave e restituire il valore da un array PHP?

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

In Python, c'è un metodo dict.pop che mi permetteva di fare qualcosa di simile in una dichiarazione, senza una variabile temporanea:

return session.pop(AFTER_LOGIN_TARGET) 

Esiste una funzione o un trucco simile in PHP?

+1

sì, l'array_pop di php rimuove/ritorna sempre l'ultimo elemento ... – Sebas

+0

@Sebas ma non ciò che è Python La funzione 'dict.pop()' fa ed è inutile nel caso descritto – lanzz

+0

lo so, questo è quello che ho detto .. – Sebas

risposta

8

Non vedo una funzione integrata per questo, ma puoi facilmente crearne uno tuo.

/** 
* 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; 
} 

È possibile utilizzarlo con qualsiasi array, ad es. $_SESSION:

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

"isset", sarebbe sufficiente. – Eugene

+0

@Eugene - 'isset' restituirà' false' se il valore è 'null', facendo sì che la funzione lasci la voce nella matrice. –

+0

Stavo parlando di 'array_key_exists'. 'isset' sarebbe sufficiente. – Eugene

1

Perché una funzione di supporto? Qualcosa del genere:

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

    return $var; 
} 

Quindi, se si chiama

$myVar = getAndRemoveFromSession ("AFTER_LOGIN_TARGET"); 

hai quello che hai chiesto (provate un po ', non ho usato php per molte volte: -])

+0

'getAndRemoveFromSession'? – Eugene

+0

Sì, ho rinominato –

0

penso che quello che stai cercando è array_slice()

$target = array_slice(
    $_SESSION, 
    array_search('AFTER_LOGIN_TARGET', $_SESSION), 
    1 
); 
Problemi correlati