@@ -220,30 +220,50 @@ require_once __DIR__ . '/setup.php';
220220(function () {
221221 $ root = Preset::wikiTree ();
222222
223+ //
223224 // level-order (?), leaves only (the default)
224- $ str = [];
225- foreach (new RecursiveIteratorIterator (new Native ($ root )) as $ node ) {
225+ //
226+
227+ $ str = $ keys = [];
228+ foreach (new RecursiveIteratorIterator (new Native ($ root )) as $ key => $ node ) {
226229 $ str [] = $ node ->data ();
230+ $ keys [] = $ key ;
227231 }
228232 Assert::same ('A,C,E,H ' , implode (', ' , $ str ));
229- $ str = [];
230- foreach (new RecursiveIteratorIterator (new Native ($ root ), RecursiveIteratorIterator::LEAVES_ONLY ) as $ node ) {
233+ Assert::same ('0,0,1,0 ' , implode (', ' , $ keys ));
234+
235+ $ str = $ keys = [];
236+ foreach (new RecursiveIteratorIterator (new Native ($ root ), RecursiveIteratorIterator::LEAVES_ONLY ) as $ key => $ node ) {
231237 $ str [] = $ node ->data ();
238+ $ keys [] = $ key ;
232239 }
233240 Assert::same ('A,C,E,H ' , implode (', ' , $ str ));
241+ Assert::same ('0,0,1,0 ' , implode (', ' , $ keys ));
234242
243+ //
235244 // pre-order, all nodes
236- $ str = [];
237- foreach (new RecursiveIteratorIterator (new Native ($ root ), RecursiveIteratorIterator::SELF_FIRST ) as $ node ) {
245+ //
246+
247+ $ str = $ keys = [];
248+ foreach (new RecursiveIteratorIterator (new Native ($ root ), RecursiveIteratorIterator::SELF_FIRST ) as $ key => $ node ) {
238249 $ str [] = $ node ->data ();
250+ $ keys [] = $ key ;
239251 }
252+ // F,B,A,D,C,E,G,I,H is the iteration order of nodes, which corresponds to the following child indexes (iteration keys):
253+ // 0,0,0,1,0,1,1,0,0
240254 Assert::same ('F,B,A,D,C,E,G,I,H ' , implode (', ' , $ str ));
255+ Assert::same ('0,0,0,1,0,1,1,0,0 ' , implode (', ' , $ keys ));
241256
257+ //
242258 // post-order, all nodes
243- $ str = [];
244- foreach (new RecursiveIteratorIterator (new Native ($ root ), RecursiveIteratorIterator::CHILD_FIRST ) as $ node ) {
259+ //
260+
261+ $ str = $ keys = [];
262+ foreach (new RecursiveIteratorIterator (new Native ($ root ), RecursiveIteratorIterator::CHILD_FIRST ) as $ key => $ node ) {
245263 $ str [] = $ node ->data ();
264+ $ keys [] = $ key ;
246265 }
247266 Assert::same ('A,C,E,D,B,H,I,G,F ' , implode (', ' , $ str ));
267+ Assert::same ('0,0,1,1,0,0,0,1,0 ' , implode (', ' , $ keys ));
248268})();
249269
0 commit comments