Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP数组中删除键并返回值?_Php_Arrays - Fatal编程技术网

如何从PHP数组中删除键并返回值?

如何从PHP数组中删除键并返回值?,php,arrays,Php,Arrays,在使用PHP时,我发现自己经常编写这样的代码: $target = $_SESSION[AFTER_LOGIN_TARGET]; unset($_SESSION[AFTER_LOGIN_TARGET]); return $target; 在Python中,有一个dict.pop方法可以让我在一条语句中执行类似的操作,而不需要临时变量: return session.pop(AFTER_LOGIN_TARGET) PHP中有类似的函数或技巧吗?为什么有帮助函数?诸如此类: function g

在使用PHP时,我发现自己经常编写这样的代码:

$target = $_SESSION[AFTER_LOGIN_TARGET];
unset($_SESSION[AFTER_LOGIN_TARGET]);
return $target;
在Python中,有一个
dict.pop
方法可以让我在一条语句中执行类似的操作,而不需要临时变量:

return session.pop(AFTER_LOGIN_TARGET)

PHP中有类似的函数或技巧吗?

为什么有帮助函数?诸如此类:

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

    return $var;
}
所以如果你打电话

$myVar = getAndRemoveFromSession ("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;
}
您可以将其用于任何数组,例如,
$\u SESSION

return array_remove($_SESSION, 'AFTER_LOGIN_TARGET');
又短又甜

使用PHP7+您可以使用来大大缩短此函数。您甚至不需要
isset()


我想你要找的是array_slice()

的变体,使用空合并

function array_remove(array &$arr, $key) {
    $value = $arr[$key] ?? null;
    unset($arr[$key]);
    return $value;
}

是的,php的数组\u pop总是删除/返回最后一个元素…@Sebas,但这不是Python的
dict.pop()
函数所做的,在所描述的case@Eugene-
isset
如果值为
null
,将返回
false
,导致函数将条目保留在数组中。我说的是
array\u key\u exists
isset
就足够了。@Eugene-我也是。
php-r'$x[“foo”]=null;变量转储(isset($x[“foo”]);'输出
bool(false)
array\u key\u exists
稍慢,但即使键映射到
null
,它也会返回
true
。可以将Unset放在if语句之后。如果要取消设置的密钥不存在,则不会发生错误,甚至不会发出通知。所以@Eugene是对的,isset就足够了。我在4天前发布了一个PHP7解决方案。
$target = array_slice(
    $_SESSION, 
    array_search('AFTER_LOGIN_TARGET', $_SESSION),
    1
);
function array_remove(array &$arr, $key) {
    $value = $arr[$key] ?? null;
    unset($arr[$key]);
    return $value;
}