PHP

Древовидные комментарии. PHP + MySQL

Структура таблицы. Прикладываю sql для удобства.
CREATE TABLE `comment` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`status_id` INT(10) UNSIGNED NOT NULL DEFAULT '1',
`profile_id` INT(10) UNSIGNED NOT NULL,
`object_type_id` INT(10) UNSIGNED NOT NULL,
`object_id` INT(10) UNSIGNED NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`comment` TEXT NOT NULL,
`vote` FLOAT UNSIGNED NOT NULL DEFAULT '0',
`count_vote` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`parent_id` INT(10) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`id`),
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (1, 2, 0, 1, 6, '2012-10-19 17:17:51', 'Довольно интересная и поучительная Статья', 0, 0, NULL);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (2, 2, 0, 1, 6, '2012-10-19 17:17:55', 'Замечание: Поскольку имена контроллера и действия могут содержать символы-ограничители слов, такие, как \'_\', \'.\', и \'-\', то render() нормализует их к \'-\', когда определяет имя скрипта.', 0, 0, NULL);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (3, 2, 0, 1, 6, '2012-10-19 17:18:01', 'нутри себя для такой нормализации он использует ограничители слов и путей для диспетчера. Таким образом, запрос к /foo.bar/baz-bat приведет к рендерингу скрипта foo-bar/baz-bat.phtml.', 0, 0, NULL);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (4, 2, 0, 1, 6, '2012-10-19 17:18:11', 'Если ваш метод действия содержит camelCase, то следует иметь в виду, что при определении имени скрипта вида результатом будут разделенные \'-\' слова. ', 0, 0, 3);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (5, 2, 0, 1, 6, '2012-10-19 17:18:16', 'Вот уж Аннушка и масло пролила.', 0, 0, 4);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (6, 2, 0, 1, 6, '2012-10-19 17:18:37', 'Пушкин написал Есенина.', 0, 0, 3);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (7, 2, 0, 1, 6, '2012-10-19 17:18:44', 'Аххаха. Вот это бред.', 0, 0, 6);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (8, 2, 0, 1, 6, '2012-10-22 13:08:09', 'Флудерасты блин!', 0, 0, NULL);
INSERT INTO `comment` (`id`, `status_id`, `profile_id`, `object_type_id`, `object_id`, `created_at`, `comment`, `vote`, `count_vote`, `parent_id`) VALUES (9, 2, 0, 1, 6, '2012-10-19 17:18:16', 'Вот уж Аннушка и масло пролила. ч2', 0, 0, 4);

PHP выглядит у меня вот так.
global $a_rows; 
$wood = array();

function getChild($parent){
     global $a_rows;
        $array = array();
        $i = 0;
        foreach($a_rows as $row){
            if($parent['id'] == $row['parent_id']){
                $array[$i] = $row;
                $array[$i]['child'] = array();
                $array[$i]['child'][] = getChild($row);
                $i++;
            }
        }
        return $array;
    }

$rows = mysql_query($sql);
        if(count($rows)){
            $rows = mysql_fetch_assoc($rows);
            $a_rows = $rows;
        }
        foreach($a_rows as $row){
            if(empty($row['parent_id'])){
                $row['child'] = getChild($row['id']);
                $wood[$row['id']] = $row;
            }
        }
        echo "<hr><pre>";
        print_r($wood);
Теги:
деревя
Добавлено: 25 Сентября 2013 01:37:10 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...