【问题标题】:PHP: unset does not work in foreachPHP:未设置在 foreach 中不起作用
【发布时间】:2012-07-20 14:26:39
【问题描述】:

我正在尝试在foreach 循环中使用unset,但它不起作用。

我的代码:

$aggr = $_GET;
foreach($aggr as $key => $value)
{
        $pos_key = preg_replace('/dst_addr/', '', $key);
        // why this not works:
        unset($aggr[$key]);
        unset($aggr[$key.'_h'.$pos_key]);
}

在第二次迭代中,我的密钥是 eq $key.'_h'.$pos_key,但这个密钥应该被删除而不是。

【问题讨论】:

  • 你有没有试过检查unset($aggr[$key . '_h' . $pos_key])是否存在?
  • @philippe:如果它一开始就不存在,我们就不会有问题 :)
  • 是的,这个元素存在。

标签: php foreach unset


【解决方案1】:

PHP 制作一个数组副本以对其进行迭代。既然你最终得到一个空数组,请使用堆栈:

$s = array_keys($_GET);

while($c = array_pop($s)) {
    $pos_key = str_replace('dst_addr', '', $key);

    $i = array_search($key . '_h' . $pos_key, $s);

    if($i !== false) {
        array_splice($s, $i, 1);
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2017-03-29
    • 2013-08-10
    • 2016-07-06
    • 1970-01-01
    • 2016-10-22
    • 2017-10-09
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多