PHP中弃用每个函数的替代解决方案

时间:2019-03-31 12:18:35

标签: php each deprecated

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

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

但是输出不正确,它只会重复显示第一个菜单项,并陷入无休止的循环中,因此不起作用。

我的偏好只是重写代码并尝试了

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

1 个答案:

答案 0 :(得分:1)

关于代码:

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

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

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

这意味着each()= current()val后跟next()调用

注意:我将使用foreach,这只是如何保留fetch()函数的说明。

代码:

.Attachments.Add WB.FullName

测试here