Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка Undefined offset:
 
 автор: serjinio   (28.08.2009 в 12:12)   письмо автору
 
 

$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

  Ответить  
 
 автор: Trianon   (28.08.2009 в 12:18)   письмо автору
 
   для: serjinio   (28.08.2009 в 12:12)
 

а подумать?
Или хотя бы сделать print_r() ?

  Ответить  
 
 автор: serjinio   (28.08.2009 в 14:29)   письмо автору
 
   для: Trianon   (28.08.2009 в 12:18)
 

print_r() естественно делал, но ничего криминального в массиве не увидел :(
Написал в форум ,потому-что не пойму ,как исправить ,можно конечно понизить уровень ошибок или забить ее собакой..но хочу понять почему выскакивает и как устранить..

  Ответить  
 
 автор: Trianon   (28.08.2009 в 15:09)   письмо автору
 
   для: serjinio   (28.08.2009 в 14:29)
 

потому что элементы в массиве нумеруются от нуля, а не от единицы.
А смотреть нужно было на индекс последнего элемента.

  Ответить  
 
 автор: serjinio   (28.08.2009 в 16:16)   письмо автору
 
   для: 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] ?

  Ответить  
 
 автор: Trianon   (28.08.2009 в 16:32)   письмо автору
 
   для: serjinio   (28.08.2009 в 16:16)
 

те для p_id =0 [ poz-->0,1,2...] и свои позиции для каждой ветки [ poz-->0,1,2,3...] ,


ни буквы непонятно.

И почему нельзя сделать ORDER BY poz тоже неясно.

  Ответить  
 
 автор: serjinio   (28.08.2009 в 22:58)   письмо автору
 
   для: 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 то все смешается ,поэтому надо сортировать[ раздельно ] массив корневой (статьи) (фильмы) и отдельно ветки (политика , искусство ) и ( фантастика, документальные, научные) и тд....

  Ответить  
 
 автор: Trianon   (28.08.2009 в 23:31)   письмо автору
 
   для: serjinio   (28.08.2009 в 22:58)
 

ORDER BY p_id, poz

  Ответить  
 
 автор: serjinio   (28.08.2009 в 23:51)   письмо автору
 
   для: Trianon   (28.08.2009 в 23:31)
 

Trianon ,спасибо ,не знал что можно использовать несколько полей:(
а можно еще вопрос ..до какого объема памяти можно таким способом делать выборку..те при 30 позиций [ Памяти затрачено:~ 111.938 Kb ]

  Ответить  
 
 автор: nikita2206   (28.08.2009 в 20:14)   письмо автору
 
   для: serjinio   (28.08.2009 в 16:16)
 

вместо for ($x=0;$x< count($list);$x++) лучше писать, так:
$count = count($list);
for ($x=0;$x< $count;$x++)

так как в первом случае получается что функция count вызывается каждую итерацию цикла

  Ответить  
 
 автор: serjinio   (28.08.2009 в 23:02)   письмо автору
 
   для: nikita2206   (28.08.2009 в 20:14)
 

Спасибо,существенное замечание.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования