ホームページ  >  記事  >  バックエンド開発  >  多次元配列を走査するために PHP foreach を実装する方法

多次元配列を走査するために PHP foreach を実装する方法

高洛峰
高洛峰オリジナル
2016-12-12 10:34:121200ブラウズ

はじめに
通常、foreach は 1 次元配列の各キー => 値を順番に出力できますが、それが多次元配列の場合は、ネストされたループでループするか、再帰的に実装する必要がありますが、これらのメソッドは柔軟性が十分ではありません。配列の次元がいくつあるかを知らずに無限の入れ子ループを作成することは不可能であるため、再帰を使用すれば解決できますが、単に foreach を使用してすべてのループをループアウトしたい場合はどうすればよいでしょうか。達成できるでしょうか?

実装方法その1
PHP付属のイテレータクラスRecursiveIteratorIteratorを使用する

$test_arr = array(1,2,3,array(4,'aa'=>5,6,array(7,'bb'=>8),9,10),11,12);
 $arrayiter = new RecursiveArrayIterator($test_arr);
 $iteriter = new RecursiveIteratorIterator($arrayiter);
 //直接打印即可按照横向顺序打印出来
 foreach ($iteriter as $key => $val){
   echo $key.'=>'.$val;
 }
 //结果
 /*
   0=>1
   1=>2
   2=>3
   0=>4
   aa=>5
   2=>6
   0=>7
   bb=>8
   4=>9
   5=>10
   4=>11
   5=>12
*/


実装方法その2
RecursiveIteratorIteratorと同様のイテレータクラスを自分で実装して多次元配列の水平印刷機能を実現する

れーれー


内部実行メソッド

1. Foreach は、カスタマイズされた foreachPrintfArr クラスをループし、5 つの内部メソッド valid()、rewind()、key()、next()、および current() を自動的に呼び出します。必要なのはこれらのメソッドを実装するだけです。 -> キー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。