更新弃用的代码,从 each() 到 foreach()

Updating deprecated code, from each() to foreach()

我正在努力修复一些在 PHP 7.2.0 上触发警告的旧代码,因为 each() 已被弃用。

我尝试将 each() 替换为 foreach(),如下所示,但它不起作用。 我在 Whosebug 上找到了一些答案,但是 none 与我正在尝试修复的旧代码中的纯 return 一样。

需要更新的旧代码(运行良好,但触发警告):

if ($n > 0){
    if ($n !== count($array)){
        return (bool) each($array);
    }
}

我试过(但没有用):

if ($n > 0){
    if ($n !== count($array)){
        foreach($array as $key => $value) {
            return (bool) $value;
        }
        unset($value);
    }
}

感谢任何帮助,谢谢:)

php 团队似乎鼓励您自己管理数组指针。您可以用 ArrayIterator 包装器替换原始数组。

$arrayItor = new ArrayIterator($array);

然后可以使用此迭代器更新您的代码。

if ($n > 0){
    if ($n !== $arrayItor->count()){
        $ret = $arrayItor->current();
        $arrayItor->next();
        return (bool)$ret;
    }
}

另一种方法是 currentnext 尚未弃用,因此您可以使用它们来替换 each 函数

if ($n > 0){
    if ($n !== count($array)){
        $ret = current($array);
        next($array);
        return (bool)$ret;
    }
}