альтернативное решение для устаревшей каждой функции в PHP - PullRequest
0 голосов
/ 31 марта 2019

У меня есть какой-то устаревший код, который использует каждый для возврата значений пунктов меню

function fetch () {

    $item = each( $this->menu );
    if ( $item ) {
        return ( $item['value'] );
    } else {
        reset ( $this->menu );
        return false;
    }
}

Я попытался решить эту проблему, добавив функцию, которая эмулирует каждую функцию:

function each_replacement($arr) {
    $key = key($arr);
    $result = ($key === null) ? false : [$key, current($arr), 'key' => $key, 'value' => current($arr)];
    next($arr);
    return $result;
}

Иизменив исходный выбор функции на этот (нашел это в другом потоке:

function fetch () {

    $item = this->each_replacement( $this->menu );
    if ( $item ) {
        return ( $item['value'] );
    } else {
        reset ( $this->menu );
        return false;
    }
}

Но вывод неправильный, он только несколько раз показывает первый элемент меню и застревает в бесконечном цикле, так что это неРабота*

Uncaught Error: Cannot use object of type MenuItem as array

Если кто-нибудь может помочь мне найти решение, которое было бы замечательно.

Полный код меню находится здесь: http://sandbox.onlinephpfunctions.com/code/45a3c9c5c24232096744ecd9b915b13982ec551a

1 Ответ

1 голос
/ 31 марта 2019

О коде:

  1. each () - Возвращает текущую пару ключ-значение из массива и переместить курсор массива

  2. current () - Возвращает текущий элемент в массиве

  3. next () - Продвинуть внутренний указатель массива

Это означает, что каждый () = текущий () val следует после вызова next ()

~

Примечание: я бы использовал foreach, это просто объяснение того, как сохранить функцию fetch ().

Код:

    /**
     * Iterates over the menu array
     * @return mixed item from menu
     * @access public
     */
    function fetch () {

        $item = current($this->menu);
        if ( $item ) {
            next($this->menu);
            return $item;
        }
        reset($this->menu);
        return false;

    }

Тест здесь

...