我正在编码,我偶然发现了这一点。为什么这个代码不工作?为什么我不能在另一个函数中使用unset?
function remove($array,$key) {
unset($array[$key]);
}
function finished() {
$finished = array(1,2,3,4,5);
remove($finished,3);
return $finished;
}
我正在编码,我偶然发现了这一点。为什么这个代码不工作?为什么我不能在另一个函数中使用unset?
function remove($array,$key) {
unset($array[$key]);
}
function finished() {
$finished = array(1,2,3,4,5);
remove($finished,3);
return $finished;
}
这是因为数组被复制(因为它是通过值传递的)。如果要更改原始变量,则需要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;
}
您需要将阵列从你的函数中存在不不影响在全球范围内的阵列改变其返回。
function remove($array,$key) {
unset($array[$key]); // $array is only changed inside the function
return $array;
}
$array = remove($array, 'key'); // now $array is changed
使用&
function remove(&$array,$key) {
unset($array[$key]);
}
很有意思,感谢传递变量的参考! – user3650808
请不要将反引号用于非代码的东西。它们用于突出显示内联代码块,而不是强调:) –
我经常在引用代码段时使用它们(与'&'一样)以及引用函数名时(与'remove'一样)。 – user3650808