При использовании PHP я нахожу, что пишу код так много:
$target = $_SESSION[AFTER_LOGIN_TARGET]; unset($_SESSION[AFTER_LOGIN_TARGET]); return $target;
В Python существует метод dict.pop
, который позволил бы мне сделать что-то подобное в одном выражении без временной переменной:
return session.pop(AFTER_LOGIN_TARGET)
Есть ли аналогичная функция или трюк в PHP?
Я не вижу встроенной функции для этого, но вы можете легко создать свой собственный.
/** * 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; }
с/** * 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');
Почему о вспомогательной функции? Что-то вроде того:
function getAndRemoveFromSession ($varName) { $var = $_SESSION[$varName]; unset($_SESSION[$varName]); return $var; }
сfunction getAndRemoveFromSession ($varName) { $var = $_SESSION[$varName]; unset($_SESSION[$varName]); return $var; }
Поэтому, если вы позвоните
$myVar = getAndRemoveFromSession ("AFTER_LOGIN_TARGET");
у вас есть то, что вы просили (попробуйте немного, я не использовал php много раз: -])
Я думаю, что вы ищете array_slice ()
$target = array_slice( $_SESSION, array_search('AFTER_LOGIN_TARGET', $_SESSION), 1 );