<?php

error_reporting(-1);

// Немного рекурсивной магии
$array = array(
    1, 2,
    array(3, 4, 5),
    6,
    array(array(array(7, 8), 9)),
    10
);

// Итератор по массиву, он может в рекурсию но не делает ее по умолчанию
$iter = new RecursiveArrayIterator($array);

// Итератор, заставляющий предыдущий делать рекурсию
$recursiveIter = new RecursiveIteratorIterator($iter);

// Провеим работает ли
foreach ($recursiveIter as $item) {
    echo $item."  ";    
}

// Сколько элементов в массиве?
$count = iterator_count($recursiveIter);
echo "| $count items\n";

// Ок, теперь посчитаем сумму всех элементов итератором: 
$sum = 0;
iterator_apply($recursiveIter, function () use (&$sum, $recursiveIter) {
    // значение само не передается
    $sum += $recursiveIter->current();
    return true;
});

echo "Sum = $sum\n";

// Делаем плоский массив из рекурсивного
$array = iterator_to_array($recursiveIter, false);
var_dump(implode(', ', $array));

