Avatar ·

Как реализовать рекурсию в PHP?

Всем привет! Подскажите, пожалуйста, как правильно реализовать рекурсию в PHP. Пишу функцию для обхода многомерного массива и подсчёта всех значений, но на выходе получаю либо 0, либо бесконечный цикл.

Вот что я пробовал:

function recursiveSum($arr) {
    static $sum = 0;
    foreach ($arr as $value) {
        if (is_array($value)) {
            recursiveSum($value);
        } else {
            $sum += $value;
        }
    }
    return $sum;
}

$data = [1, [2, 3], [4, [5, 6]]];
echo recursiveSum($data); // ожидаю: 21

Проблема в том, что при повторных вызовах функции с разными массивами результат накапливается из-за static-переменной. Я также пробовал передавать сумму по ссылке (&$sum), но тогда функция возвращает неожиданные значения. Ещё вариант с глобальной переменной тоже не подходит — это нарушает принципы чистоты кода.

Ожидаю, что функция должна возвращать сумму всех чисел в массиве любой вложенности, при этом каждый вызов должен быть независимым. Как правильно организовать рекурсию, чтобы результат не зависел от предыдущих вызовов? Может, есть какие-то best practices для рекурсивных функций в PHP? Заранее спасибо за помощь!