|
|
|
| Здравствуйте.
Есть пример рекурсивного вывода (взят из одной ранее обсуждаемых тем...)
Подскажите, пожалуйста, можно ли сделать так, чтобы элементы с parent=0 - сортировались в порядке убывания (id например), а все остальные - как обычно? Т.е чтобы последние добавленные темы были на 1-м месте...
Структура таблицы такая:
CREATE TABLE `table` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`parent` INT( 10 ) NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL );
|
Корневые разделы будут иметь parent=0
Подраздел добавляется к любому разделу путем присвоения столбцу parent подраздела значения id родительского раздела.
Затем все это можно выбрать в массив:
<?php
$output = array();
$result = mysql_query("SELECT * FROM `table`");
while($row = mysql_fetch_assoc($result))
{
$i = $row['id'];
$p = $row['parent'];
$output[$p][$i] = $row['name'];
}
?>
|
И вывести:
<?php
build_tree($output, 0);
function build_tree($arr, $root, $prefix='--')
{
foreach($arr[$root] as $key=>$value)
{
echo $prefix.$value.'<br>';
if(isset($arr[$key])) build_tree($arr, $key, $prefix.'--');
}
}
?>
|
| |
|
|
|
|
|
|
|
для: jaroslav
(20.10.2009 в 16:05)
| | Хм... прото отсортируйте все подмассивы $output[$p] при помощи функции ksort(), а если $p == 0, то при помощи krsort(). | |
|
|
|
|
|
|
|
для: cheops
(20.10.2009 в 19:02)
| | Спасибо. А код можете привести, а то это "просто" - у меня всю ночь займёт :))) | |
|
|
|