今天在为博客开发文本分析工具时,我发现 PHP 的行为对我来说很奇怪,我无法理解它。在规范化文本时,我试图删除最小长度以下的单词,所以我在规范化方法中写了这个:
if ($this->minimumLength > 1) {
foreach ($string as &$word)
{
if (strlen($word) < $this->minimumLength) {
unset($word);
}
}
}
奇怪的是,这会在我的数组中留下一些低于允许长度的单词。在全班搜索错误后,我试了一下:
if ($this->minimumLength > 1) {
foreach ($string as $key => $word)
{
if (strlen($word) < $this->minimumLength) {
unset($string[$key]);
}
}
}
瞧!这非常有效。现在,为什么会发生这种情况?我检查了PHP 文档,它指出:
如果通过引用传递的变量在函数内部是 unset(),则只有局部变量被破坏。调用环境中的变量将保留与调用 unset() 之前相同的值。
是否因为它有自己的范围而foreach
在这里充当?calling environment