phpforeacheachphp-7.2

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


I'm working to fix some old code that triggers a warning on PHP 7.2.0, beacause each() is deprecated.

I tried to replace each() with foreach() like the following, but it doesn't work. I found some answers on StackOverflow, but none with a straight pure return as in the old code I'm trying to fix.

Old code that needs to be updated (works well, but triggers a warning):

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

What I tried (and doesn't work):

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

Any help is appreciated, thank you :)


Solution

  • It seems like the php team encourages you to manage array pointers yourself. you can replace the original array with an ArrayIterator wrapper.

    $arrayItor = new ArrayIterator($array);
    

    Then your code can be updated by using this iterator.

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

    Another approach is current and next are not deprecated yet, so you can use them to replace the each function

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