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

Should I unset both `$key` and `$value` after every foreach statement?

我找到的所有答案都只谈论取消设置 $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)访问数组数据,如 $subkey$subvalue分别。

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