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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив-дерево, Создание массива-дерева 
:(
    Опции темы
Raily
Дата 11.7.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет, может кто знает, как можно сделать следующее:
Имеем следующую структуру в базе данных:

ID | Parent | Name
---------------------------------------------
1 | 0 | Category One
2 | 1 | Subcategory One
3 | 0 | One more category
4 | 2 | Sub-sub category
... и т.д.

Мне нужен PHP класс, который данную таблицу сериализует в следующий
формат:
[
{
"Name" : "Category One",
"ID" : 1,
"Children" : [
{
"Name" : "Subcategory One",
"ID" : 2,
"Children" : ...
}
]
},
{
"Name" : "One more category",
"ID" : 3,
"Children" : [ ]
}
]
т.е. массив объектов, в каждом из которых есть массив дочерних элементов, т.е. рекурсивная модель.
PM MAIL   Вверх
gta4kv
Дата 11.7.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



Это так много раз обсуждалось на форуме, что не прилично новые темы уже создавать.

Добавлено через 2 минуты и 10 секунд
Вот как пример моя тема:
клац
PM MAIL   Вверх
skyboy
Дата 11.7.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(Raily @  11.7.2008,  21:20 Найти цитируемый пост)
т.е. массив объектов

массив массивов - не козырно?
gta4kv, а зачем делать N выборок из базы данных?
PM MAIL   Вверх
gta4kv
Дата 12.7.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



skyboy, посмотри последний пост в той теме, там или один запрос или я сошел с ума.

Добавлено через 3 минуты и 7 секунд
Работает функция так:
Код

$tree = $this->getCategory( );
$this->showTree( $tree, 0 );

Запрос всего один раз выполняется
PM MAIL   Вверх
skyboy
Дата 12.7.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



gta4kv, ты прав. меня заклинило.
приношу свои извинения.
PM MAIL   Вверх
gta4kv
Дата 12.7.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



Цитата(skyboy @ 12.7.2008,  10:57)
gta4kv, ты прав. меня заклинило.
приношу свои извинения.

Ой. да ладно..

Просто при написании скрипт рассчитывался на большую оптимизацию. (Да-да, понимаю что здесь это глупо. Но почему бы и нет?) И такие моменты как раз таки были продуманы, - зачем много когда можно один раз?  smile 

Это сообщение отредактировал(а) gta4kv - 12.7.2008, 11:11
PM MAIL   Вверх
Raily
Дата 12.7.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сериализацию вроде можно таким кодом провести?
Код

<?php
function serialize_table_id($id = 0)
{
    $q = mysql_query('SELECT `ID`,`Name` FROM `tbl` WHERE `Parent`='.intval($id));
    $str = '[';
    for($i = 0; false !== $fetch = mysql_fetch_assoc($q); $i++)
    {
        if($i != 0)
            $str .= ',';
        $str .= '{';
        $str .= '"Name" : "'.$fetch['Name'].'",';
        $str .= '"ID" : '.$fetch['ID'].',';
        $str .= '"Children" : '.serialize_table_id($fetch['ID']);
        $str .= '}';
    }
    mysql_free_result($q);
    $str .= ']';
    return $str;
}
echo serialize_table_id();
?> 


Но возможно ли тут ещё произвести XmlHttpRequest и запросить данный объект, а также заполнить элемент select с помощью данного массива, вложенность отображая отступами?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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