Php 我应该在每个foreach语句之后同时取消设置“$key”和“$value”吗?

Php 我应该在每个foreach语句之后同时取消设置“$key”和“$value”吗?,php,foreach,unset,Php,Foreach,Unset,我找到的所有答案都只涉及不稳定的$value,只有一个答案我不清楚。我来了。假设我有台词: foreach ($data as $key => $value) { // do stuff } 我应该把这两行放在后面吗 unset($key); unset($value); 或者我可以省略unset($key)?此外,是否建议在每个foreach之后始终使用unset?假设我有嵌套的foreach循环,如下所示: foreach ($data as $key =&

我找到的所有答案都只涉及不稳定的
$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 ($data as $key => $value) {
    foreach ($value as $subkey => $subvalue) {
        // do stuff
    }
}
使用上述代码,您可以分别从
$date[$key]
(实际上等于父循环中的
$value
)和
$subvalue
访问数组数据


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

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