Рекурсия для подсчета кол-ва тем и постов

ShVad

JSmart CMS
Рекурсия для подсчета кол-ва тем и постов

Здравствуйте

Цель написать функцию которая будет суммировать кол-во тем и ответ в под-форумах форума.

Структура массива такая:

PHP:
Array
(
    [1] => Array
        (
            [id] => 1
            [name] => Тестовая категория
            [description] => 
            [position] => 0
            [parent_id] => -1
            [is_category] => 1
            [topics] => 0
            [posts] => 0
            [last_topic] => 0
            [last_title] => 0
            [last_time] => 0
            [last_post] => 0
            [last_poster_id] => 0
            [last_poster_name] => 
            [alt_name] => 
        )

    [2] => Array
        (
            [id] => 2
            [name] => Тестовый форум
            [description] => Описание тестового форума
            [position] => 0
            [parent_id] => 1
            [is_category] => 0
            [topics] => 1
            [posts] => 10
            [last_topic] => 0
            [last_title] => 0
            [last_time] => 
            [last_post] => 0
            [last_poster_id] => 0
            [last_poster_name] => 
            [alt_name] => 
        )
Написал функцию:
PHP:
function stats_count ($id, &$array, $topics = 0, $posts = 0)
    {
        $topics += $array[$id]['topics'];
        $posts  += $array[$id]['posts'];
        
        foreach ($array as $forum)
        {
            if ($id == $forum['parent_id'])
            {
                $topics += $forum['topics'];
                $posts  += $forum['posts'];
                
                // рекурсия //
                //$result = $this->stats_count($forum['parent_id'], &$array, $topics, $posts);
                //$topics += $result['topics'];
                //$posts  += $result['posts'];
                // ... //
            }
        }
        
        return array('topics' => $topics, 'posts' => $posts);
    }
Если убрать комментарии то функция не работает, а так считает до 2го вложения.

Как поправить?

Спасибо.
 

rotoZOOM

ACM maniac
PHP:
/**
 * Count number of posts and topics for stated node
 * @param int $id id of stated node
 * @param array $array whole tree of nodes
 * @return list($topics,$posts) desired numbers
 */
function stats_count ($id, $array)
    {
        $topics = 0;
        $posts  = 0;
        
        foreach ($array as $forum)
        {
            if ($id == $forum['parent_id'])
            {
                $topics += $forum['topics'];
                $posts  += $forum['posts'];

                list($t,$p) = $this->stats_count($forum['id'], $array);
                $topics += $t;
                $posts += $p;
            }
        }
        return array($topics, $posts);
    }
 

zerkms

TDD infected
Команда форума
Чтобы не приходилось городить подобный ужас - число подтем и ответов нужно хранить непосредственно в таблицах тем.
 
Сверху