others - 如何解决PHP已弃用的each 函数

87 5

使用 PHP 7.2,each 被弃用。 文档说:

警告:这里函数已在 PHP 7.2.0中被弃用。 依赖这个函数非常不提倡。

如何更新代码以避免使用它? 以下是一些示例:

  • 
    $ar = $o->me;
    
    
    reset($ar);
    
    
    list($typ, $val) = each($ar);
    
    
    
    
  • 
    $out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
    
    
    $expected = each($out);
    
    
    
    
  • 
    for(reset($broken);$kv = each($broken);) {...}
    
    
    
    
  • 
    list(, $this->result) = each($this->cache_data);
    
    
    
    
  • 
    //iterating to the end of an array or a limit> the length of the array
    
    
    $i = 0;
    
    
    reset($array);
    
    
    while( (list($id, $item) = each($array)) || $i <30 ) {
    
    
    //code
    
    
     $i++;
    
    
    }
    
    
    
    
时间: 原作者:

104 4

你可以使用 key 和 current 为你的前两个示例分配所需的值。

  • 
    $ar = $o->me;//reset isn't necessary, since you just created the array
    
    
    $typ = key($ar);
    
    
    $val = current($ar);
    
    
    
    
  • 
    $out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
    
    
    $expected = [key($out), current($out)];
    
    
    
    

在这些情况下你可以使用 next 来移动指针, 但如果其余代码不依赖于这里则可能没有必要 。

对于第三种情况,我建议只使用一个foreach循环,并在循环中分配 $kv


foreach ($broken as $k => $v) {


 $kv = [$k, $v];


}



对于第四种情况,list 中的键似乎被忽略了,所以你可以分配当前值。


$this->result = current($this->cache_data);



前两种情况一样,可能需要使用 next 来向前移动指针,具体取决于代码的其余部分如何与 $this-

#5 可以替换为循环。


reset($array);


for ($i = 0; $i <30; $i++) {


 $id = key($array);


 $item = current($array);


//code


 next($array);


}



原作者:
55 4

你可以使用 key() current()next() 创建自己的 each() 函数 。 然后用该函数替换你的调用,如下所示:


<?php


function myEach(&$arr) {


 $key = key($arr);


 $result = ($key === null)? false : [$key, current($arr), 'key' => $key, 'value' => current($arr)];


 next($arr);


 return $result;


}



1.


$ar = $o->me;


reset($ar);


list($typ, $val) = myEach($ar);



2.


$out = array('me' => array(), 'mytype' => 2, '_php_class' => null);


$expected = myEach($out);



3.


for(reset($broken);$kv = myEach($broken);) {...}



...