取消引用数组项

3
$arr = array('a' => 1, 'b' => 2);

$xxx = &$arr['a'];

unset($xxx);

print_r($arr);  // still there :(

所以只有使用unset才能打破引用...

你知道一种在关联数组中删除元素的方式吗?

是的,我知道我可以在上面的代码中使用unset($arr['a']),但这仅在我完全知道数组有多少项时才可行,不幸的是我不知道。

这个问题有点类似于这个问题(这就是为什么那个解决方案不起作用的原因)


你不能使用 unset($arr); 吗? - Nalaka526
3个回答

2

我可能错了,但我认为取消数组中的元素的唯一方法是查找与您引用的变量相匹配的值的索引,然后取消设置该元素。

 $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]);

不错的解决方案,但以下代码怎么办呢? $arr = array('a' => 1, 'b' => 2, 'c'=>1); $xxx = &$arr['c']; 这就是为什么它对我无效的原因:( - 1' OR 1 --

1

当您取消引用时,您只是打破了变量名称和变量内容之间的绑定关系。这并不意味着变量内容将被销毁。

关于上面的代码-我认为没有必要使用单独的键

foreach($arr as $key => $value)
{
      if($value === $xxx)
      {
          unset($arr[$key]);
          break;
      }
 }

0
简单的回答是:
$arr = array('a' => 1, 'b' => 2);

$xxx = 'a';

unset($arr[$xxx]);

print_r($arr);  // gone :)

也就是说,你可能不需要引用。只需将$xxx设置为相应的键即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接