Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Категории и подкатегории [4]
Форумы портала PHP.SU » » Работа с СУБД » Категории и подкатегории

Страниц (5): « 1 2 3 [4] 5 »
 

46. ibe - 24 Августа, 2009 - 13:09:58 - перейти к сообщению
Нет. Я просто никак не пойму.
Вот сейчас поставил для наглядности DataLife engine. Посмотрел таблицу с категориями. Вот что там(см. скриншот)
47. Stierus - 24 Августа, 2009 - 13:23:51 - перейти к сообщению
И что не понятно ?

есть id - он индивидуален, как серия и номер паспорта
есть pid - это id того раздела, которому ты являешься "потомком"

ну собери ты лестницу сам

id parent_id name


1 0 прадед
2 1 дед
3 2 отец
4 3 я


у меня id 4, мой родитель - элемент с id 3 (у меня в Parent_id это записано) ... смотрим, что у нас под элементом с id 3 ... блин, это ж отец ... мистика, а что у него в Parent_id стоит? ... вах, кто-то с id 2 ... кто бы это мог быть?

Ну на столько голову отключать нельзя же
48. Roler - 24 Августа, 2009 - 13:25:20 - перейти к сообщению
ibe
parent_id - это id родительской категории.
Данные лежат так, а когда выводятся категории - то всё забирается в массив, и по этому массиву проходятся Улыбка

P.S. Опередили.
49. ibe - 24 Августа, 2009 - 14:26:15 - перейти к сообщению
При таком варианте:
PHP:
скопировать код в буфер обмена
  1. $q = mysql_query("SELECT * FROM categories");
  2. while ($row = mysql_fetch_row($q)) { // в row будет id, parent_id, caption
  3.         $categs[ $row[1] ][] = array($row[0], $row[2]); // ну сам всё видишь.
  4. }
  5. var_dump($categs); // и всё увидишь

получил вот это:
CODE (text):
скопировать код в буфер обмена
  1.     array(8) {
  2.   [1]=>
  3.   array(1) {
  4.     [0]=>
  5.     array(2) {
  6.       [0]=>
  7.       string(2) "PC"
  8.       [1]=>
  9.       string(1) "0"
  10.     }
  11.   }
  12.   [2]=>
  13.   array(1) {
  14.     [0]=>
  15.     array(2) {
  16.       [0]=>
  17.       string(3) "PSP"
  18.       [1]=>
  19.       string(1) "0"
  20.     }
  21.   }
  22.   [3]=>
  23.   array(1) {
  24.     [0]=>
  25.     array(2) {
  26.       [0]=>
  27.       string(7) "XBOX360"
  28.       [1]=>
  29.       string(1) "0"
  30.     }
  31.   }
  32.   [4]=>
  33.   array(1) {
  34.     [0]=>
  35.     array(2) {
  36.       [0]=>
  37.       string(12) "PlayStation3"
  38.       [1]=>
  39.       string(1) "0"
  40.     }
  41.   }
  42.   [5]=>
  43.   array(1) {
  44.     [0]=>
  45.     array(2) {
  46.       [0]=>
  47.       string(5) "Flash"
  48.       [1]=>
  49.       string(1) "0"
  50.     }
  51.   }
  52.   [6]=>
  53.   array(1) {
  54.     [0]=>
  55.     array(2) {
  56.       [0]=>
  57.       string(6) "Mobile"
  58.       [1]=>
  59.       string(1) "0"
  60.     }
  61.   }
  62.   [7]=>
  63.   array(1) {
  64.     [0]=>
  65.     array(2) {
  66.       [0]=>
  67.       string(7) "Новости"
  68.       [1]=>
  69.       string(2) "1"
  70.     }
  71.   }
  72.   [8]=>
  73.   array(1) {
  74.     [0]=>
  75.     array(2) {
  76.       [0]=>
  77.       string(6) "Статьи"
  78.       [1]=>
  79.       string(2) "1"
  80.     }
  81.   }
  82. }
50. Champion - 24 Августа, 2009 - 14:52:04 - перейти к сообщению
ibe, думай, что делаешь. Если бы ты хоть чуть-чуть пытался понять, что ты делаешь, уже закончил бы давно с этим вопросом.
Я тебе давал запрос SELECT id, parent_id, caption FROM categories.
В созданной тобой таблице id и parent ты поменял местамиб а индексы в массиве - нет. И получилсоь совсем не то. Исправляй, смотри, думай.
(Добавление)
Блин, все скопировал, даже комментарии не трогал. А список в select зачем-то поменял. Умник)
51. ibe - 24 Августа, 2009 - 22:12:10 - перейти к сообщению
Запарели уже эти категории...нифига ничего не получается.
Уже 2-ой день сижу с ними. С массивами я не пониамю как это можно сделать, ибо категории по parent_id не получается отсортировать вообще.
Нахмурился
52. Champion - 25 Августа, 2009 - 08:45:13 - перейти к сообщению
ibe пишет:
по parent_id не получается отсортировать вообще.
ORDER BY. И перечисли поля в нужном порядке в селекте. И приведи сюда получивший правильный var_dump. И посмотри на него. И подумай.

А вообще, это означает, что либо ты слишком рано взялся за базы данных, либо вообще с ними не знакомился и сразу подменю лезешь с их помощью делать.
53. Stierus - 25 Августа, 2009 - 10:04:14 - перейти к сообщению
http://phpclub[dot]ru/detail/article/2002-06-03 если и после этого останутся вопросы - откладывай свою затею на неопределённый срок, видимо, рано.

http://phpclub[dot]ru/detail/article/db_tree вдруг, для тебя это покажется проще (маловероятно, но мало ли)
54. ibe - 25 Августа, 2009 - 16:14:49 - перейти к сообщению
var_dump выводит все категории что есть в базе в массив. А мне нужно вывести только родительские категории, ибо не родительские категории уже готовы:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $style = 11;
  3.  $cats1 = mysql_query("SELECT * FROM categories WHERE parent_id=0");
  4.     while  ($cats = mysql_fetch_array($cats1))
  5.    {
  6.  
  7.                 echo " <li class='tn".$style."'>
  8.                         <a href='/view.php?cat=".$cats['id']."'><span>".$cats['title']."</span></a>             </li>";
  9.  
  10.  $style = $style + 1;      
  11.    }
  12.  
  13. ?>

Теперь нужно вывести только нижнее меню, которое состоит из родительских категорий. Как - я не знаю. Пробовал через WHERE parent_id=id... не выходит.
-----
Вы неправильно меня поняли.
55. Champion - 25 Августа, 2009 - 18:18:24 - перейти к сообщению
Ты специально дубом прикидываешься? Я такое первый раз вижу, что человеку на протяжении почти 60 сообщений объясняют как меню с подменю построить. Причем говорят как сделать, а он 3й или какой там раз, делает не понятно как ...
Перечитай внимательно все сообщения, начиная с того, где я написал select. Прочитай этот select 1000 раз. Найди, чем он отличается от твоего. Заметь, что 2 раза я тебе уже эти отличия говорил
56. _tango - 05 Апреля, 2010 - 03:41:53 - перейти к сообщению
Я, честно говоря, даже боюсь заикаться в этой ветке, о подкатегориях Ниндзя
Но выхода другого у меня нет, так что рискну Радость , похоже, что у всех жертв курса Жени Попова одни и те же проблемы Радость
Ситуация у меня совершенно аналогичная. Имеется база: id, parent_id, title
По вашей рекомендации, сделал запрос и создал из него в цикле массив:

PHP:
скопировать код в буфер обмена
  1. $queryresult = mysql_query('SELECT id, parent_id, title FROM allcategories ORDER BY parent_id, id');
  2. while ($row = mysql_fetch_assoc($queryresult)) {
  3.         $cat[$row['parent_id']][] = array($row['id'], $row['title']);
  4. }

Получился многомерный массив. Но у него нет той же структуры вложенности, что и у таблицы, здесь в первом элементе массива содержатся категории, а в остальных подкатегории:
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(5) {
  2.   [0]=>
  3.   array(4) {
  4.     [0]=>
  5.     array(2) {
  6.       [0]=>
  7.       string(1) "1"
  8.       [1]=>
  9.       string(20) "категория_1"
  10.     }
  11.     [1]=>
  12.     array(2) {
  13.       [0]=>
  14.       string(1) "2"
  15.       [1]=>
  16.       string(20) "категория_2"
  17.     }
  18.     [2]=>
  19.     array(2) {
  20.       [0]=>
  21.       string(1) "3"
  22.       [1]=>
  23.       string(20) "категория_3"
  24.     }
  25.     [3]=>
  26.     array(2) {
  27.       [0]=>
  28.       string(1) "4"
  29.       [1]=>
  30.       string(20) "категория_4"
  31.     }
  32.   }
  33.   [1]=>
  34.   array(4) {
  35.     [0]=>
  36.     array(2) {
  37.       [0]=>
  38.       string(1) "5"
  39.       [1]=>
  40.       string(28) "подкатегория_1_1"
  41.     }
  42.     [1]=>
  43.     array(2) {
  44.       [0]=>
  45.       string(1) "6"
  46.       [1]=>
  47.       string(28) "подкатегория_1_2"
  48.     }
  49.     [2]=>
  50.     array(2) {
  51.       [0]=>
  52.       string(1) "7"
  53.       [1]=>
  54.       string(28) "подкатегория_1_3"
  55.     }
  56.     [3]=>
  57.     array(2) {
  58.       [0]=>
  59.       string(1) "8"
  60.       [1]=>
  61.       string(28) "подкатегория_1_4"
  62.     }
  63.   }
  64.   [2]=>
  65.   array(4) {
  66.     [0]=>
  67.     array(2) {
  68.       [0]=>
  69.       string(2) "13"
  70.       [1]=>
  71.       string(28) "подкатегория_2_1"
  72.     }
  73.     [1]=>
  74.     array(2) {
  75.       [0]=>
  76.       string(2) "14"
  77.       [1]=>
  78.       string(28) "подкатегория_2_2"
  79.     }
  80.     [2]=>
  81.     array(2) {
  82.       [0]=>
  83.       string(2) "15"
  84.       [1]=>
  85.       string(28) "подкатегория_2_3"
  86.     }
  87.     [3]=>
  88.     array(2) {
  89.       [0]=>
  90.       string(2) "16"
  91.       [1]=>
  92.       string(28) "подкатегория_2_4"
  93.     }
  94.   }
  95.   [3]=>
  96.   array(4) {
  97.     [0]=>
  98.     array(2) {
  99.       [0]=>
  100.       string(1) "9"
  101.       [1]=>
  102.       string(28) "подкатегория_3_1"
  103.     }
  104.     [1]=>
  105.     array(2) {
  106.       [0]=>
  107.       string(2) "10"
  108.       [1]=>
  109.       string(28) "подкатегория_3_2"
  110.     }
  111.     [2]=>
  112.     array(2) {
  113.       [0]=>
  114.       string(2) "11"
  115.       [1]=>
  116.       string(28) "подкатегория_3_3"
  117.     }
  118.     [3]=>
  119.     array(2) {
  120.       [0]=>
  121.       string(2) "12"
  122.       [1]=>
  123.       string(28) "подкатегория_3_4"
  124.     }
  125.   }
  126.   [4]=>
  127.   array(3) {
  128.     [0]=>
  129.     array(2) {
  130.       [0]=>
  131.       string(2) "17"
  132.       [1]=>
  133.       string(28) "подкатегория_4_1"
  134.     }
  135.     [1]=>
  136.     array(2) {
  137.       [0]=>
  138.       string(2) "18"
  139.       [1]=>
  140.       string(28) "подкатегория_4_2"
  141.     }
  142.     [2]=>
  143.     array(2) {
  144.       [0]=>
  145.       string(2) "19"
  146.       [1]=>
  147.       string(28) "подкатегория_4_3"
  148.     }
  149.   }
  150. }
  151.  


Проблема в том, что с комбинаторикой у меня дела не важно обстоят Огорчение
Подскажите пожалуйста, как обойти массив, чтобы вывести категории и подкатегории в правильной последовательности?
57. Champion - 05 Апреля, 2010 - 11:01:32 - перейти к сообщению
Комбинаторика тут не важна. Обойти массив надо циклом foreach. Получшь номер категории и массив ее элементов.
58. JustUserR - 05 Апреля, 2010 - 11:58:36 - перейти к сообщению
_tango пишет:
Подскажите пожалуйста, как обойти массив, чтобы вывести категории и подкатегории в правильной последовательности?
Если массив уже многомерный то функция print_r как раз выведет вам в нужной последовательности с сохранением уровня вложенности Улыбка
59. _tango - 06 Апреля, 2010 - 01:34:27 - перейти к сообщению
Вот, создал Радость
Но как то уж очень натянуто получилось Однако
Господа мэтры, помогите покрасивше сделать?
Пожалуйста Закатив глазки

PHP:
скопировать код в буфер обмена
  1. $queryresult = mysql_query('SELECT id, parent_id, title FROM testcat ORDER BY parent_id, id');
  2. while ($row = mysql_fetch_assoc($queryresult)) {
  3.         $cat[$row['parent_id']][] = array($row['id'], $row['title']);
  4. }
  5.  
  6. foreach ($cat as $id1 => $v1 ) // Тут создаю массив с названиями категорий
  7. {
  8.         if($id1==0)
  9.                 foreach ($v1 as $id2 => $v2)
  10.                 {
  11.                         $titlecat[$id2+1] = $v2[1];
  12.                 }
  13. }
  14.  
  15. foreach ($cat as $id1 => $v1 )
  16. {
  17.         echo $titlecat[$id1]."<br />";
  18.         foreach ($v1 as $id2 => $v2)
  19.         {
  20.                 if($id1!=0)
  21.                 echo $v2[1]."<br />";
  22.         }
  23. }
  24.  


Выводится вот в таком виде:

категория_1
подкатегория_1_1
подкатегория_1_2
подкатегория_1_3
подкатегория_1_4
категория_2
подкатегория_2_1
подкатегория_2_2
подкатегория_2_3
подкатегория_2_4
категория_3
подкатегория_3_1
подкатегория_3_2
подкатегория_3_3
подкатегория_3_4
категория_4
подкатегория_4_1
подкатегория_4_2
подкатегория_4_3
60. JustUserR - 06 Апреля, 2010 - 13:23:10 - перейти к сообщению
_tango пишет:
Господа мэтры, помогите покрасивше сделать?
Если хотите можете сделать рекурсивную обработку чтобы можно было работать с произвольной глубиной подкатегорий Улыбка

 

Powered by ExBB FM 1.0 RC1