2012-06-05 1 views
8

При использовании PHP, я считаю себя писать код, как это много:Как удалить ключ и вернуть значение из массива PHP?

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

В Python, есть dict.pop метод, который позволил бы мне сделать что-то подобное в одном операторе, без временной переменной:

return session.pop(AFTER_LOGIN_TARGET) 

Есть ли аналогичная функция или трюк в PHP?

+1

да, array_pop РНР удаляет/возвращает всегда последний элемент ... – Sebas

+0

@Sebas, но это не то, что в Python 'dict.pop()' функция делает, и бесполезно в описанном случае – lanzz

+0

я знаю, вот что я сказал .. – Sebas

ответ

8

Я не вижу встроенной функции для этого, но вы можете легко создать свой собственный.

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

Вы можете использовать его с любым массивом, например. $_SESSION:

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

'isset' было бы достаточно. – Eugene

+0

@Eugene - 'isset' вернет' false', если значение 'null', заставив функцию оставить запись в массиве. –

+0

Я говорил о 'array_key_exists'. 'isset' было бы достаточно. – Eugene

1

Почему о вспомогательной функции? Нечто подобное:

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

    return $var; 
} 

Так что, если вы звоните

$myVar = getAndRemoveFromSession ("AFTER_LOGIN_TARGET"); 

у вас есть то, что вы просили (попробуйте немного, я не использовал PHP много раз: -])

+0

'getAndRemoveFromSession'? – Eugene

+0

Да, я переименовал –

0

Я думаю, что вы ищете array_slice()

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