【问题标题】:alternative solution for deprecated each function in PHPPHP中不推荐使用的每个函数的替代解决方案
【发布时间】:2019-08-21 18:35:49
【问题描述】:

我有一些旧代码使用每个来返回菜单项值

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;
}

并将原始函数 fetch 更改为此(在另一个线程中找到:

function fetch () {

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

但是输出不正确,它只重复显示第一个菜单项并陷入无限循环,所以不起作用。

我的偏好只是重写代码并尝试了一些类似的东西

foreach ($this->menu as $item) {  }

而不是

$item = each( $this->menu )

但这给了我这个错误:

Uncaught Error: Cannot use object of type MenuItem as array

如果有人能帮我想出一个很棒的解决方案。

完整的菜单代码在这里: http://sandbox.onlinephpfunctions.com/code/45a3c9c5c24232096744ecd9b915b13982ec551a

【问题讨论】:

    标签: php each deprecated


    【解决方案1】:

    关于代码:

    1. each() - 从数组中返回当前键值对 前进数组光标

    2. current() - 返回数组中的当前元素

    3. next() - 推进数组的内部指针

    这意味着 each() = current() 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;
    
        }
    

    测试here

    【讨论】:

    • 感谢您的建议。我阅读了您的解释并尝试了两种解决方案,但不幸的是菜单项没有显示,也没有错误。
    • 你能提供更多细节吗?看这里:sandbox.onlinephpfunctions.com/code/…
    • 我把完整的菜单代码放在这里sandbox.onlinephpfunctions.com/code/…
    • readMenu 将值附加到 $this->items 数组。 $this->menu 数组永远不会更新。
    • 我在 Menu 类中看到了 $this->menu,但仍然不知道如何让事情正常工作...顺便说一下,每个功能都可以正常工作(已弃用),但我需要让它在没有每个功能的情况下工作
    猜你喜欢
    • 2021-10-23
    • 2021-04-26
    • 2014-12-09
    • 1970-01-01
    • 2021-03-28
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多