Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неожиданное значение рекурсивной функции, странно, немножко не того я ожидал... 
V
    Опции темы
mark2011
Дата 28.7.2011, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: 2
Всего: 2



Доброе утро, форучане smile

В базе есть некие значения, необходимо их вернуть деревом, начиная с самого последнего. Накодил вот такую фичу:

Код

function print_db_backtrace($cat_id)
global $db;

        
        if (!isset($result) || !is_array($result))
        {
            $result = array();
        }    
        
        //начальный запрос к интересующему элементу
        $db->query('SELECT parent_id, cat_dirname FROM photo_browser_categories WHERE cat_id = "'.$cat_id.'"');
        
        //анализируем запрос
        $r = $db->parse_query('array');
        
        //получаем parent_id каталога
        $parent_id   = $r['parent_id'];
        $cat_dirname = $r['cat_dirname'];
        
        //добавляем в массив первый элемент
        $result[] =   $cat_dirname;
        
        //если не добрались до корня, то повторяем всё сначала
        if ($parent_id > 0)
        {
            $result[] = print_db_backtrace($parent_id);
        }
        
        return $result;
}


Собственно, чего я ожидаю... при первом проходе $result естественно не определён, поэтому он будет инициализирован пустым массивом. В него будут занесены первые значения. При последующих проходах функции (сколько бы их ни было) массив уже будет определён, поэтому в него будут добавляться значения. Т.е. я ожидаю все значения получить в одном массиве, без "под"массивов... Вместо этого в результате выполнения

Код

print_r(print_db_backtrace(19));


я получаю следующее:

Код

Array
(
    [0] => test1
    [1] => Array
        (
            [0] => test
            [1] => Array
                (
                    [0] => root
                )

        )

)


Помогите отследить, где вкралась ошибка? smile

Это сообщение отредактировал(а) mark2011 - 28.7.2011, 08:31
PM WWW ICQ Skype   Вверх
CruorVult
Дата 28.7.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Код

function print_db_backtrace($cat_id, $result = array())
global $db;

        
        //начальный запрос к интересующему элементу
        $db->query('SELECT parent_id, cat_dirname FROM photo_browser_categories WHERE cat_id = "'.$cat_id.'"');
        
        //анализируем запрос
        $r = $db->parse_query('array');
        
        //получаем parent_id каталога
        $parent_id   = $r['parent_id'];
        $cat_dirname = $r['cat_dirname'];
        
        //добавляем в массив первый элемент
        $result[] =   $cat_dirname;
        
        //если не добрались до корня, то повторяем всё сначала
        if ($parent_id > 0)
        {
            $result = print_db_backtrace($parent_id,  $result);
        }
        
        return $result;
}


как-то так
PM MAIL Skype   Вверх
mark2011
Дата 28.7.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: 2
Всего: 2



CruorVult, 
Спасибо огромное! Посты не позволяют вам репутацию поднять, так бы обязательно поднял! smile
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4849 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.