fork download
  1. <?php
  2.  
  3.  
  4. // Немного рекурсивной магии
  5. $array = array(
  6. 1, 2,
  7. array(3, 4, 5),
  8. 6,
  9. array(array(array(7, 8), 9)),
  10. 10
  11. );
  12.  
  13. // Итератор по массиву, он может в рекурсию но не делает ее по умолчанию
  14. $iter = new RecursiveArrayIterator($array);
  15.  
  16. // Итератор, заставляющий предыдущий делать рекурсию
  17. $recursiveIter = new RecursiveIteratorIterator($iter);
  18.  
  19. // Провеим работает ли
  20. foreach ($recursiveIter as $item) {
  21. echo $item." ";
  22. }
  23.  
  24. // Сколько элементов в массиве?
  25. $count = iterator_count($recursiveIter);
  26. echo "| $count items\n";
  27.  
  28. // Ок, теперь посчитаем сумму всех элементов итератором:
  29. $sum = 0;
  30. iterator_apply($recursiveIter, function () use (&$sum, $recursiveIter) {
  31. // значение само не передается
  32. $sum += $recursiveIter->current();
  33. return true;
  34. });
  35.  
  36. echo "Sum = $sum\n";
  37.  
  38. // Делаем плоский массив из рекурсивного
  39. $array = iterator_to_array($recursiveIter, false);
  40. var_dump(implode(', ', $array));
  41.  
  42.  
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
1  2  3  4  5  6  7  8  9  10  | 10 items
Sum = 55
string(29) "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"