$arr = array('a' => 1, 'b' => 2);
$xxx = &$arr['a'];
unset($xxx);
print_r($arr); // still there :(
所以取消设置只会破坏引用...
你知道取消引用数组中元素的方法吗?
是的,我知道我可以在上面的代码中使用 unset($arr['a'])
,但这只有在我确切知道数组有多少项时才有可能,并且很遗憾我没有。
这个问题有点相关this one (这就是该解决方案不起作用的原因)
最佳答案
我可能错了,但我认为取消设置数组中元素的唯一方法是查找与您拥有的变量引用的值相匹配的索引,然后取消设置该元素。
$arr = array('a' => 1, 'b' => 2);
$xxx = &$arr['a'];
$keyToUnset = null;
foreach($arr as $key => $value)
{
if($value === $xxx)
{
$keyToUnset = $key;
break;
}
}
if($keyToUnset !== null)
unset($arr[$keyToUnset]);
$unset($xxx);
好吧,无论如何,有些事情是沿着这些思路进行的。但是,请记住,这并不是非常有效,因为每次您需要取消设置一个元素时,您都必须遍历整个数组来寻找它。
假设您可以控制 $xxx 的使用方式,您可能需要考虑使用它来保存数组中的键,而不是对键处元素的引用。这样,当您想要取消设置元素时就不需要搜索数组。但是您必须将所有使用 $xxx 的站点替换为数组取消引用:
$arr = array('a' => 1, 'b' => 2);
$xxx = 'a';
// instead of $xxx, use:
$arr[$xxx];
// to unset, simply
unset($arr[$xxx]);
关于php - 取消设置引用的数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146366/