【问题标题】:Should I unset both `$key` and `$value` after every foreach statement?我应该在每个 foreach 语句之后取消设置 `$key` 和 `$value` 吗?
【发布时间】:2018-06-09 05:18:12
【问题描述】:

我找到的所有答案都只涉及解除$value 的问题,除了一个我不清楚的答案。所以我在这里。说我有这条线:

foreach ($data as $key => $value)
    {
    // do stuff
    }

我应该把这两行放在后面吗?

unset($key);
unset($value);

或者我可以省略unset($key)?此外,是否建议在每个 foreach 之后始终使用 unset?假设我嵌套了foreach 循环,如下所示:

foreach ($data as $key => $value)
    {
        foreach ($data[$key] as $key => $value)
        {
        // do stuff
        }
        unset($key);
        unset($value);
    }
    unset($key);
    unset($value);

嵌套的unset() 函数是否会干扰最高级别的foreach?也就是说,嵌套的$key和$value和最高级的$key和$value一样吗?

【问题讨论】:

  • 也没有需要取消设置。你想完成什么?
  • 我正在使用foreach 循环来创建具有唯一值的键数组,但是某些键被分配了与在它们之前以不可预知的方式创建的键相同的值,而我没有在我的整个代码中只有一个 unset(),所以我怀疑这就是原因。
  • 对嵌套的 foreach 循环使用不同的变量。 foreach($data as $k => $v)
  • 在循环之后不调用unset 的唯一常见缺点是,如果您是通过引用循环的,而您不是。否则,变量要么被其他东西覆盖,要么超出范围。如果你在嵌套循环中使用相同的变量名,那你就是自找麻烦。
  • 感谢@GrumpCrouton,这似乎很容易解决。谢谢。

标签: php foreach unset


【解决方案1】:

问题的解决方案比您想象的要容易。

只需更改嵌套循环的变量名称,如下所示:

foreach ($data as $key => $value) {
    foreach ($value as $subkey => $subvalue) {
        // do stuff
    }
}

通过上面的代码,您可以分别以$subkey 和$subvalue 访问来自$date[$key](实际上等于父循环内的$value)的数组数据。

您还可以分别使用$key 和$value 在父foreach 循环内的任何位置访问父循环数据。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2013-08-10
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多