php unset函数 删除引用值的问题

clipboard.png
如上图所示

阅读 5.3k
7 个回答

unset是取消了变量名value和数组arr中每个遍历元素的引用,所以并不会销毁arr数组中的元素,如果你需要删除数组中的元素,可以unset($arr[$key]);

这写法有误,应该用unset($arr[$key])的方式删除数组元素,而不是直接unset($value)

文档有解释

当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了

http://php.net/manual/zh/lang...

数组是存在堆区的,而你的那个$value是栈区的,你unset的只是一个引用变量, 实际上堆区的还在,一般想删除引用堆区的变都是通过$p = null

图片描述

unset($arr[$key]);

需要unset原数组才行

foreach中的数组用法是传值方式,是对数组的副本进行操作,foreach中的任何改动都不会影响到原数组,除非手动指定传地址方式,如下

$arr = [-1, 12, -123, 123];

foreach($arr as $key => &$value){ //使用&符号指定此次foreach为传地址的方式,操作原数组
    if($value < 0){
        unset($value);
    }
}
var_dump($arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题