-1

遇到一个奇怪的情况,使用array_walk()只会从我的方法中部分删除匹配项,不确定到底发生了什么。我目前正在使用 PHP v5.6.4。问题似乎是它只删除了每个次要匹配。

字距调整功能

private function strip(array $exceptions)
{
    array_walk($this->hosts, function($v, $k) USE ($exceptions)
    {
        foreach ($exceptions AS $exception)
        {
            if (preg_match("/{$exception}/i", strtolower($k)))
            {
                unset($this->hosts[$k]); break;
            }
        }
    });
    print_r($this->hosts); die;
}
4

2 回答 2

1

引用PHP 文档

只有数组的值可能会改变;它的结构不能改变,即程序员不能添加、取消设置或重新排序元素。如果回调不遵守此要求,则此函数的行为未定义且不可预测。

我的重点

于 2015-02-26T22:42:39.407 回答
1

这与马克贝克提供的信息一起工作,感谢马克。

private function strip(array $exceptions)
{
    $this->hosts = array_filter($this->hosts, function ($k) USE ($exceptions)
    {
        foreach ($exceptions AS $exception)
        {
            if (preg_match("/{$exception}/i", strtolower($k)))

                return false;
        }
        return true;
    }, ARRAY_FILTER_USE_KEY);

    return $this;
}
于 2015-02-26T22:57:21.337 回答