はじめに
通常、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() を自動的に呼び出します。必要なのはこれらのメソッドを実装するだけです。 -> キー