1. ホーム
  2. php

[解決済み] 非推奨のeach()関数を使用しているコードを更新するにはどうすればよいですか?

2022-03-03 04:49:38

質問

PHP7.2で。 each は非推奨です。 ドキュメント と書かれています。

警告 この関数は PHP 7.2.0 以降で廃止されました。この関数に依存することは非常に危険です。

これを使わないようにするには、どのようにコードを更新すればよいのでしょうか?以下はその例です。

  1. $ar = $o->me;
    reset($ar);
    list($typ, $val) = each($ar);
    
    
  2. $out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
    $expected = each($out);
    
    
  3. for(reset($broken);$kv = each($broken);) {...}
    
    
  4. list(, $this->result) = each($this->cache_data);
    
    
  5. // 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++;
    }
    
    

PHP7.2で実行すると、以下のエラーが発生します。

非推奨。each() 関数は非推奨です。このメッセージは、今後呼び出すと抑制されます。

解決方法は?

  1. 最初の2つの例では、次のように使用できます。 key()current() で必要な値を割り当ててください。

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

    そのような場合は next() でカーソルを先に進めることができますが、残りのコードがそれに依存しないのであれば、必要ないかもしれません。

  3. 3つ目のケースについては、単に foreach() ループの代わりに $kv ループの中で

    foreach ($broken as $k => $v) {
         $kv = [$k, $v];
    }
    
    
  4. 4つ目のケースは、キーが無視されるような形で list() ということで、現在の値を代入することができます。

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

    最初の2つのケースと同様に、カーソルを進めるために next() をどのように扱うかによって異なります。 $this->cache_data .

  5. 5番目は for() のループになります。

    reset($array);
    for ($i = 0; $i < 30; $i++) {
        $id = key($array);
        $item = current($array);
        // code
        next($array);
    }