今天我在为博客撰写的文本分析工具上工作时,发现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
在这里是否充当了调用环境
,因为它有自己的作用域?
false
并在其上运行array_filter确实是最清晰的方法。 - user2742648