为什么我不能在另一个函数中使用unset?

时间:2014-05-19 01:42:43

标签: php arrays

我正在编码,我偶然发现了这一点。为什么这段代码不起作用?

function remove($array,$key) {

    unset($array[$key]);

}

function finished() {

    $finished = array(1,2,3,4,5);

    remove($finished,3);

    return $finished;
}

http://codepad.org/vemXHwnA

3 个答案:

答案 0 :(得分:3)

这是因为数组被复制(因为它是按值传递的)。如果要更改原始变量,则需要pass by reference。请注意&参数列表中的remove。它表示参数通过引用传递:

function remove(&$array,$key) {
    unset($array[$key]);
}

function finished() {
    $finished = array(1,2,3,4,5);

    remove($finished, 3);

    return $finished;
}

Demo

答案 1 :(得分:1)

您需要从函数返回数组,因为 not 会影响全局范围内的数组。

function remove($array,$key) {
    unset($array[$key]); // $array is only changed inside the function
    return $array;
}

$array = remove($array, 'key'); // now $array is changed

答案 2 :(得分:0)

使用&

传递该变量的引用
function remove(&$array,$key) {
unset($array[$key]);
}