|
|
|
|
$res = do_query("SELECT `id`, `p_id`, `title` FROM `cat` ORDER BY `id` ",$db);
if (mysql_num_rows($res)>0)
{
$menu='';
$menu.="<ul>\n";
while($r = mysql_fetch_assoc($res)){ $list[] = $r; }
foreach($list as $key)
{
if ($key['p_id']==0)
{
$menu.='<li><a href="#" > ' .$key['title'].'</a>';
$menu.="\n<ul>\n";
level($list,$key['id']-1);
$menu.="</ul>\n</li>\n";
}
}
$menu.="\n</ul>";
}
function level($list,$i)
{
global $menu;
for ($x=1; $x <= count($list); $x++)
{
if($list[$i]['id'] == $list[$x]['p_id'])
{
level($list,$x);
$menu.="</li>\n";
}
}
if($list[$i]['p_id'] > 0) $menu.=' <li><a href="#">'.$list[$i]['title'].'</a>';
}
//echo $menu;
|
$list[$x]['p_id']) выдает Notice: Undefined offset: 27 | |
|
|
|
|
|
|
|
для: serjinio
(28.08.2009 в 12:12)
| | а подумать?
Или хотя бы сделать print_r() ? | |
|
|
|
|
|
|
|
для: Trianon
(28.08.2009 в 12:18)
| | print_r() естественно делал, но ничего криминального в массиве не увидел :(
Написал в форум ,потому-что не пойму ,как исправить ,можно конечно понизить уровень ошибок или забить ее собакой..но хочу понять почему выскакивает и как устранить.. | |
|
|
|
|
|
|
|
для: serjinio
(28.08.2009 в 14:29)
| | потому что элементы в массиве нумеруются от нуля, а не от единицы.
А смотреть нужно было на индекс последнего элемента. | |
|
|
|
|
|
|
|
для: Trianon
(28.08.2009 в 15:09)
| | Спасибо переделал for ($x=0;$x< count($list);$x++) ошибка пропала :)))
а еще такой вопрос :
если добавляется поле poz (позиция) в БД те для p_id =0 [ poz-->0,1,2...] и свои позиции для каждой ветки [ poz-->0,1,2,3...] ,то отсортировать по [ `poz` FROM `cat` ORDER BY `poz` ]не получится ,те надо сортировать уже в цикле т.е foreach($list as $key){ }
Array
(
[id] => 1
[p_id] => 0
[title] => Статьи
[poz] => 0
)
Array
(
[id] => 77
[p_id] => 0
[title] => Разное
[poz] => 1
)
как в таком массиве отсортировать по полю [poz] ? | |
|
|
|
|
|
|
|
для: serjinio
(28.08.2009 в 16:16)
| |
те для p_id =0 [ poz-->0,1,2...] и свои позиции для каждой ветки [ poz-->0,1,2,3...] ,
|
ни буквы непонятно.
И почему нельзя сделать ORDER BY poz тоже неясно. | |
|
|
|
|
|
|
|
для: Trianon
(28.08.2009 в 16:32)
| | Не мог ответить, форум висел...
id p-id title poz
1 0 статьи 0
2 0 фильмы 1
3 0 разное 2
4 1 политика 0
5 1 искуство 1
6 2 фантастика 0
7 2 документалтные 1
8 2 научные 2
|
если делать ORDER BY poz то все смешается ,поэтому надо сортировать[ раздельно ] массив корневой (статьи) (фильмы) и отдельно ветки (политика , искусство ) и ( фантастика, документальные, научные) и тд.... | |
|
|
|
|
|
|
|
для: serjinio
(28.08.2009 в 22:58)
| | ORDER BY p_id, poz | |
|
|
|
|
|
|
|
для: Trianon
(28.08.2009 в 23:31)
| | Trianon ,спасибо ,не знал что можно использовать несколько полей:(
а можно еще вопрос ..до какого объема памяти можно таким способом делать выборку..те при 30 позиций [ Памяти затрачено:~ 111.938 Kb ] | |
|
|
|
|
|
|
|
для: serjinio
(28.08.2009 в 16:16)
| | вместо for ($x=0;$x< count($list);$x++) лучше писать, так:
$count = count($list);
for ($x=0;$x< $count;$x++)
так как в первом случае получается что функция count вызывается каждую итерацию цикла | |
|
|
|
|
|
|
|
для: nikita2206
(28.08.2009 в 20:14)
| | Спасибо,существенное замечание. | |
|
|
|