php - 取消设置引用的数组项

标签 php arrays

$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/

相关文章:

php - 我们可以从 codeigniter 中的单个模型方法执行两个查询吗?

php - 这个 PHP 函数返回什么?

php - PHP中如何输出两个字段?

php - 使用 Javascript 执行流程并将更新/回调发送到网络服务器

arrays - 类验证器 - 验证对象数组

javascript - 如何在数组中找到最小可能的键组合

php - 获取mysql数据的正确方法

java - 如何从数组中打印出对象?

c# - 如何在 1D 数组中使用 "flatten"或 "index"3D 数组?

python - 将 NumPy 数组的指定元素转换为新值