John.Deff
19.04.2013 - 12:14
Имеются данные в БД в виде "id", "parent", "info" при помощи рекурсии делаю многоуровневое меню.
Всё прекрасно работает как надо.
Вопрос в том, как сделать навигационную цепочку (Навигационное меню, «Хлебные крошки») имея "id", "parent", "info"?
то есть исходя из того в какой из кактегорий во вложенности я нахожусь, надо формировать навигационную цепочку, типа:
Категория -> ПодКатегория -> ПодПодКатегория
killer8080
19.04.2013 - 17:00
John.Deff
19.04.2013 - 23:02
спасибо за попытку, но это не то, что мне нужно!
killer8080
20.04.2013 - 11:57
Цитата (John.Deff @ 19.04.2013 - 22:02) |
спасибо за попытку, но это не то, что мне нужно! |
Разве?

А что тогда нужно?
John.Deff
20.04.2013 - 12:31
Цитата (killer8080 @ 20.04.2013 - 07:57) |
Цитата (John.Deff @ 19.04.2013 - 22:02) | спасибо за попытку, но это не то, что мне нужно! |
Разве?  А что тогда нужно? |
там рекурсию пытаются сделать на уровне MySQL
мне же надо на php, работа с массивом
killer8080
20.04.2013 - 12:35
Цитата (John.Deff @ 20.04.2013 - 11:31) |
мне же надо на php, работа с массивом |
и что? какие тут проблемы?
killer8080
20.04.2013 - 13:17
$id = $current_id;
$breadcrumbs = array();
do {
$result = mysql_query("
SELECT `id`, `parent`, `info`
FROM `table`
WHERE `id` = ".(int)$id
);
if($row = mysql_fetch_assoc($result)){
$breadcrumbs []= $row;
$id = $row['parent'];
}
else
break;
}
while($id > 0);
John.Deff
20.04.2013 - 13:49
Цитата (killer8080 @ 20.04.2013 - 07:57) |
$id = $current_id; $breadcrumbs = array();
do { $result = mysql_query(" SELECT `id`, `parent`, `info` FROM `table` WHERE `id` = ".(int)$id ); if($row = mysql_fetch_assoc($result)){ $breadcrumbs []= $row; $id = $row['parent']; } else break; } while($id > 0); |
:blink: нафига мне выполнять множественные запросы к БД?
у меня уже есть отобранный массив, задача работать только с ним иначе смысл?!
прочтите мой первый топик с вопросом
вывод многоуровневого каталога я осуществляю с одним запросом к БД и получаю массив, далее работаю только с массивом:
- категория 1
- категория 2
- -- подкатегория 1
- -- подкатегория 2
- -- --- подподкатегория 1
- категория 3
- -- подкатегория 1
мне же надо получить исходя из того в какой категории я нахожусь, такой путь:
категория 2 -> подкатегория 2 -> подподкатегория 1
нужно готовое решение?Вот:
@param @param @return
function crumbs($id, $data)
{
static $crumbs = array();
foreach ($data as $i => $item) {
if ($item['id'] == $id) {
$crumbs[] = $item;
if ($item['parent'] != 0) {
unset($data[$i]);
return crumbs($item['parent'], $data);
} else {
break;
}
}
}
return $crumbs;
}
$crumbs = crumbs(4, $data);
var_dump(array_reverse($crumbs));
killer8080
20.04.2013 - 15:53
Цитата (John.Deff @ 20.04.2013 - 12:49) |
у меня уже есть отобранный массив, задача работать только с ним иначе смысл?! прочтите мой первый топик с вопросом |
извините, мысли читать не умею
как об этом можно было узнать из вопроса
Цитата (John.Deff @ 19.04.2013 - 11:14) |
Имеются данные в БД в виде "id", "parent", "info" при помощи рекурсии делаю многоуровневое меню. |
Цитата (John.Deff @ 20.04.2013 - 12:49) |
у меня уже есть отобранный массив |
вот и нужно было хотя бы показать дамп этого массива.
John.Deff
20.04.2013 - 17:44
Цитата (kaww @ 20.04.2013 - 10:11) |
нужно готовое решение?Вот:
@param @param @return function crumbs($id, $data) { static $crumbs = array();
foreach ($data as $i => $item) {
if ($item['id'] == $id) {
$crumbs[] = $item; if ($item['parent'] != 0) {
unset($data[$i]); return crumbs($item['parent'], $data); } else {
break; } } } return $crumbs; } $crumbs = crumbs(4, $data); var_dump(array_reverse($crumbs)); |
подскажите! не могу понять какого вида массив $data должен быть?
$data = array();
....
$data[i]['id'] ??
...
Разобрался
Ваше решение помогло! :lol: ура!
массив $data[] = $myArray;
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.