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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод категорий неограниченной вложенности

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Telnet
Отправлено: 31 Октября, 2011 - 00:14:23
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




допустим есть такой вот массив
id parent_id title
1 0 дом
2 1 дверь
3 2 ручка
4 0 офис
5 4 окно
6 5 рама

нужно вывести ее примерно вот так
дом->дверь->ручка
офис->окно ->рама

Помогите уже всю голову на прочь сломал неполучается.
Знаю что как то нужно через рекурсию.
 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Октября, 2011 - 00:58:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Telnet пишет:
как то

То кака...
PHP:
скопировать код в буфер обмена
  1. function viewThreds(&$arr,$parent = 0) {
  2.   foreach ($arr as $item) {
  3.     if ($parent != 0) echo '-&gt';
  4.     if ($item['parent_id'] == $parent) echo $item['title'];
  5.     viewThreads($arr,$item['id']);
  6.     }
  7.   }
  8.  
  9. $arr = array(/* массив описаный выше */);
  10. viewThreads($arr);

Не проверял..
 
 Top
zypikov
Отправлено: 31 Октября, 2011 - 01:36:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




Через рекурсию не знаю как)Может поможет через многомерный массив

PHP:
скопировать код в буфер обмена
  1.  
  2. #$arr[$id]['parent_id']
  3. #$arr[$id]['title']
  4.  
  5. $arr[1]['parent_id'] = "0";
  6. $arr[1]['title'] = "Дом";
  7. $arr[2]['parent_id'] = "1";
  8. $arr[2]['title'] = "Дверь";
  9. $arr[3]['parent_id'] = "2";
  10. $arr[3]['title'] = "Ручка";
  11.  
  12. for ($q=1; $q<=3; $q++) {
  13. //echo $arr[$q]['parent_id']." ";
  14. echo $arr[$q]['title']."<br>";
  15. }

(Добавление)
DeepVarvar пишет:
$arr = array(/* массив описаный выше */);


Массив так задается

$arr = array("id"=>"1", "parent_id"=>"0", "title"=>"Дом");

?

(Отредактировано автором: 31 Октября, 2011 - 01:41:15)



-----
У всего есть обратная сторона.
 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Октября, 2011 - 02:29:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




zypikov пишет:
Массив так задается
Если фраза без вопроса, то: Спасибо КЭП.
Если с вопросом, то:
PHP:
скопировать код в буфер обмена
  1. $arr = array(
  2.   0 => array("id"=>"1", "parent_id"=>"0", "title"=>"вася"),
  3.   1 => array("id"=>"2", "parent_id"=>"1", "title"=>"петя"),
  4.   2 => array("id"=>"3", "parent_id"=>"2", "title"=>"маша"),
  5.   3 => array("id"=>"4", "parent_id"=>"0", "title"=>"дуня"),
  6.   4 => array("id"=>"5", "parent_id"=>"4", "title"=>"даздраперма"),
  7.   5 => array("id"=>"6", "parent_id"=>"5", "title"=>"фёкла")
  8.   );

(Отредактировано автором: 31 Октября, 2011 - 02:36:56)

 
 Top
psevdo
Отправлено: 31 Октября, 2011 - 07:22:44
Post Id



Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Массив у вас какой то непонятный)) Больше на таблицу БД похоже. Я делаю это через рекурсию. Может поможет:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. tree(0, '');
  4.  
  5. function tree($pid, $prefix)
  6. {
  7.    // поиск по по БД.. значение присваивается переменной $res
  8.    // select * from table where parent_id=$res
  9.    echo $prefix.$res;
  10.    prefix='->';
  11.    tree($res, $prefix);
  12. }
  13.  
  14.  

(Отредактировано автором: 31 Октября, 2011 - 07:42:55)

 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Октября, 2011 - 07:41:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




psevdo пишет:
Я делаю это через рекурсию
А через что я это делаю, через юисрукер ??? Не понял
 
 Top
psevdo
Отправлено: 31 Октября, 2011 - 07:43:58
Post Id



Гость


Покинул форум
Сообщений всего: 101
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
psevdo пишет:
Я делаю это через рекурсию
А через что я это делаю, через юисрукер ??? Не понял


Ой земляк, што то я пропустил твой пост)
 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Октября, 2011 - 07:46:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Радость
 
 Top
Самогонщик
Отправлено: 31 Октября, 2011 - 07:56:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Если исходить из того, что цепочки не ветвятся, то можно решить просто через 2 цикла, сложность О(н) - это к я решению с рекурсией и постоянному поиску нужного элемента.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $arr = array(
  4.   0 => array("id"=>"1", "parent_id"=>"0", "title"=>"вася"),
  5.   1 => array("id"=>"2", "parent_id"=>"1", "title"=>"петя"),
  6.   2 => array("id"=>"3", "parent_id"=>"2", "title"=>"маша"),
  7.   3 => array("id"=>"4", "parent_id"=>"0", "title"=>"дуня"),
  8.   4 => array("id"=>"5", "parent_id"=>"4", "title"=>"даздраперма"),
  9.   5 => array("id"=>"6", "parent_id"=>"5", "title"=>"фёкла")
  10.   );
  11.  
  12. $cache = array();
  13. $cache["0"] = array();
  14.  
  15. foreach($arr as $id => $item)
  16. {
  17.   if($item["parent_id"] === "0")
  18.     $cache["0"][] = $id;
  19.   else
  20.     $cache[$item["parent_id"]] = $item;
  21. }
  22.  
  23. print_r($cache);
  24.  
  25. foreach($cache["0"] as $id)
  26. {
  27.   echo $arr[$id]["title"];
  28.  
  29.   $id = $arr[$id]["id"];
  30.  
  31.   while($cache[$id])
  32.   {
  33.     echo "->";
  34.     echo $cache[$id]["title"];
  35.     $id = $cache[$id]["id"];
  36.   }
  37.   echo "\n";
  38. }
  39.  
  40. ?>


В первом цикле строим индекс по парент_ид и запоминаем за одно всех родителей. А потом просто выводим всех родителей, и для каждого из них легко находим потомка, а потом следующего и следующего.
 
 Top
Telnet
Отправлено: 31 Октября, 2011 - 13:52:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




спасибо всем за помощь да этот массив получаю из таблы БД
не написал что б, не тратить ваше время зря, из БД как получить массив я знаю и получаю.
Тема такая нужно из названия этих категорий создать папочки ту типа
localhost/home/site/www/upload/д ом/дверь/ручка
localhost/home/site/www/upload/офис/окно/рама
(Добавление)
Array
(
[0] => Array
(
[0] => 1
[id] => 1
[1] => 0
[parent_id] => 0
[2] => -1
[owner_id] => -1
[3] => Мебель
[title] => Мебель
[4] =>
[name] =>
[5] => mebel
[alias] => mebel
)

[1] => Array
(
[0] => 2
[id] => 2
[1] => 1
[parent_id] => 1
[2] => -1
[owner_id] => -1
[3] => Шкафы-купе «СТЕРХ»
[title] => Шкафы-купе «СТЕРХ»
[4] =>
[name] =>
[5] => shkafy-kupe-sterh
[alias] => shkafy-kupe-sterh
)

[2] => Array
(
[0] => 3
[id] => 3
[1] => 0
[parent_id] => 0
[2] => 0
[owner_id] => 0
[3] => Кухни
[title] => Кухни
[4] =>
[name] =>
[5] => kuhni
[alias] => kuhni
)

[3] => Array
(
[0] => 4
[id] => 4
[1] => 0
[parent_id] => 0
[2] => 0
[owner_id] => 0
[3] => Бытовая техника
[title] => Бытовая техника
[4] =>
[name] =>
[5] => tehnika
[alias] => tehnika
)

[4] => Array
(
[0] => 5
[id] => 5
[1] => 0
[parent_id] => 0
[2] => 0
[owner_id] => 0
[3] => Люстры и светильники
[title] => Люстры и светильники
[4] =>
[name] =>
[5] => lighters
[alias] => lighters
)

[5] => Array
(
[0] => 6
[id] => 6
[1] => 1
[parent_id] => 1
[2] => -1
[owner_id] => -1
[3] => Спальни, гостиные и гардеробные
[title] => Спальни, гостиные и гардеробные
[4] =>
[name] =>
[5] => spalni-gostinye
[alias] => spalni-gostinye
)

[6] => Array
(
[0] => 7
[id] => 7
[1] => 1
[parent_id] => 1
[2] => 0
[owner_id] => 0
[3] => Мягкая мебель
[title] => Мягкая мебель
[4] =>
[name] =>
[5] => myagkaya-mebel
[alias] => myagkaya-mebel
)

[7] => Array
(
[0] => 8
[id] => 8
[1] => 1
[parent_id] => 1
[2] => 0
[owner_id] => 0
[3] => Детские
[title] => Детские
[4] =>
[name] =>
[5] => detskie
[alias] => detskie
)

[8] => Array
(
[0] => 9
[id] => 9
[1] => 0
[parent_id] => 0
[2] => 0
[owner_id] => 0
[3] => Сантехника и мебель для ванных комнат
[title] => Сантехника и мебель для ванных комнат
[4] =>
[name] =>
[5] => santehnika
[alias] => santehnika
)

[9] => Array
(
[0] => 10
[id] => 10
[1] => 9
[parent_id] => 9
[2] => 0
[owner_id] => 0
[3] => Смесители и аксессуары
[title] => Смесители и аксессуары
[4] =>
[name] =>
[5] => smesiteli
[alias] => smesiteli
)

[10] => Array
(
[0] => 11
[id] => 11
[1] => 9
[parent_id] => 9
[2] => 0
[owner_id] => 0
[3] => Ванны и душевые кабины
[title] => Ванны и душевые кабины
[4] =>
[name] =>
[5] => bath_and_shower
[alias] => bath_and_shower
)
часть того массива который я получаю
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB