|
|
|
| Строю древовидное меню. Инфу беру из БД. Структура такая:
Пробегаюсь рекурсивной функцией по базе и вывожу его
<?php
function recur($id)
{
$query = "SELECT * FROM menu WHERE parent_id = '$id'";
$result = mysql_query($query);
if ($result && mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_array($result))
{
echo "<blockquote>{$row['title']}";
recur($row['id']);
echo "</blockquote";
}
}
}
recur(0);
?>
|
Подскажите пожалуйста, как можно пару значений - id/title запехнуть в массив вида
<?php
$tree = array('dir1'=>
array('file1'=>'file',
'file2'=>'file'),
'dir2'=>
array('dir2.1'=>
array('file2.1'=>'file',
'file2.2'=>'file'),
'file1'=>'file',
'file2'=>'file'),
'file1'=>'file');
?>
|
| |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 00:41)
| | Покажите, пожалуйста, структуру и данные таблицы, из которой построен этот массив. | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 09:32)
| | Я хочу подогнать вывод под такой массив, а нужно мне это для того, чтобы потом построить многоуровневое меню.
Массив этот я взял из темы: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=36471
Подскажите пожалуйста - это реально или можно еще каким-нибудь способом сделать многоуровневое меню | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 10:11)
| | Это реально, если Вы составите короткий пример данных, которые есть на входе и которые получаются на выходе.
Не "выглядит похоже как на это " а "в точности такой". | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 10:14)
| | вход (БД)
id | title | text | parent_id
1 Каталог Текст в каталоге 0
2 Вибродиагностика Текст о вибродиагностике 1
3 Переносная Текст о переносной установке 2
4 Стендовая Текст о стендовой установке 2
5 Балансировка Текст о балансировке 1
6 Стационарная Текст о стационарной установке 5
|
на выходе получаю:
Каталог
Вибродиагностика
Переносная
Стендовая
Балансировка
Стационарная
|
или я не правильно Вас понял? | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 10:21)
| | На выходе получаете
Заполните строки между скобками - для этого набора данных. | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 10:27)
| |
$out = array('каталог' =>
array('вибродиагностика' =>
array('переносная',
'стендовая'),
'балансировка' =>
array('стационарная')
),
);
|
| |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 10:40)
| | Я, конечно, могу построить код, который бы построил такой массив...
Но хотелось бы убедиться, что Вы написали именно то, что имеете в виду.
id | title | parent_id | коментарий
1 Каталог 0 создал array с ключом 'Каталог' и значением array
2 Вибродиагностика 1 создал array с ключом 'Вибродиагностика' и значением array
3 Переносная 2 создал array с ключом 0 и значением 'Переносная'
4 Стендовая 2 создал array с ключом 0 и значением 'Стендовая'
5 Балансировка 1 создал array с ключом 'Балансировка' и значением array
6 Стационарная 5 создал array с ключом 0 и значением 'Стационарная'
|
Работать с таким массивом будет ой как непросто. | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 10:40)
| | вот, что пока у меня получилось:
1) то меню, которое мне нужно (на дивах) - http://unicorn-studio.ru/testzone/reqursia
но оно ограничено по вложенности
2) tigra menu - http://unicorn-studio.ru/testzone/tree_menu
но мне требуется, чтобы по дизайну оно было, как первое. Сейчас переделываю, ну что-то не получается
Может быть Вам ссылки помогут представить, как должны строиться массивы | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 11:12)
| | мне поможет, если Вы составите пример. Работающий. У Вас.
Неужели это так трудно? | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 11:19)
| | Я не знаю как правильно должна идти последняя ветка, так
$out = array('каталог' =>
array('вибродиагностика' =>
array('0' => 'переносная',
'1' => 'стендовая'),
'балансировка' =>
array('0' => 'стационарная')
),
);
|
или так
$out = array('каталог' =>
array('вибродиагностика' =>
array('0' => 'переносная',
'1' => 'стендовая'),
'балансировка' =>
array('2' => 'стационарная')
),
);
|
Может быть Вы знаете, как правильно? | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 11:26)
| | может быть так?
$out = array('каталог' =>
array('вибродиагностика' =>
array('переносная' =>array() ,
'стендовая' =>array() ),
'балансировка' =>
array('стационарная' =>array() )
)
);
|
Это было бы самым логичным. | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 11:41)
| | Наверное, только, что будет в последних массивах - данные из бд по каждому из этих пунктов?
Посути, нужно чтобы у последних пунктов был id и title, чтобы можно было сформировать ссылку вида - <a href="index.php?action=menu&id=$id">$title</a>.
Какого вида должны быть последние вложения, я не знаю :( | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 11:48)
| | ну если Вы не знаете, то я - тем более :)) | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 12:05)
| | а такой, можно?
$out = array('каталог' =>
array('вибродиагностика' =>
id title
array('0' => 'переносная',
'1' => 'стендовая'),
'балансировка' =>
array('2' => 'стационарная')
),
);
|
подскажите пожалуйста и если да, то как | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 12:07)
| |
<?php include 'config.inc.php';
$sql = "SELECT id, id_parent AS pid, name FROM catalog ORDER BY pid, id";
$res = mysql_query($sql) or die("Error in $sql: ". mysql_error());
$list = array();
function create_tree($list, $root)
{
$res = array();
$x = $list[$root];
foreach($x as $k => $v)
{
$res[$v] = isset($list[$k])
? create_tree($list, $k)
: array();
}
return $res;
}
if(mysql_num_rows($res))
{
while($row = mysql_fetch_assoc($res))
{
$id = $row['id'];
$pid = $row['pid'];
$name = $row['name'];
if(!isset($list[$pid]))
$list[$pid] = array($id=>$name);
else
$list[$pid][$id] = $name;
}
}
$out = create_tree($list, 0);
echo '<pre>';
print_r($out);
?>
|
| |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 12:07)
| | нельзя.
Поскольку значений 0 1 2 нет в соответствующих строках таблицы. | |
|
|
|
|
|
|
|
для: name
(14.06.2007 в 12:07)
| | кроме того, опять нарушается рекусивная структура - опять с массивом работать невозможно.
Листовые элементы каталога ничем не отличаются от нелистовых. Не надо делать их какими-то особенными. | |
|
|
|
|
|
|
|
для: Trianon
(14.06.2007 в 12:43)
| | Большое спасибо за помощь, Trianon!
Может Вы сталкивались с подобной задачей, знаете еще какие-нибудь скрипты (решения) и можете посоветовать как быть?
Реализовать многоуровневое меню (выплывающее), которое не будет зависить от вложенности, у меня так и не получилось. | |
|
|
|
|
|
|
|
|
для: name
(14.06.2007 в 15:58)
| | . | |
|
|
|