[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рекурсия - Навигационная цепочка
John.Deff
Имеются данные в БД в виде "id", "parent", "info" при помощи рекурсии делаю многоуровневое меню.
Всё прекрасно работает как надо.

Вопрос в том, как сделать навигационную цепочку (Навигационное меню, «Хлебные крошки») имея "id", "parent", "info"?

то есть исходя из того в какой из кактегорий во вложенности я нахожусь, надо формировать навигационную цепочку, типа:
Категория -> ПодКатегория -> ПодПодКатегория
John.Deff
Цитата (killer8080 @ 19.04.2013 - 13:00)
http://stackoverflow.com/questions/3752078...ctions-in-mysql

спасибо за попытку, но это не то, что мне нужно!
killer8080
Цитата (John.Deff @ 19.04.2013 - 22:02)
спасибо за попытку, но это не то, что мне нужно!

Разве? blink.gif А что тогда нужно?
John.Deff
Цитата (killer8080 @ 20.04.2013 - 07:57)
Цитата (John.Deff @ 19.04.2013 - 22:02)
спасибо за попытку, но это не то, что мне нужно!

Разве? blink.gif А что тогда нужно?

там рекурсию пытаются сделать на уровне MySQL
мне же надо на php, работа с массивом
killer8080
Цитата (John.Deff @ 20.04.2013 - 11:31)
мне же надо на php, работа с массивом

и что? какие тут проблемы?
killer8080
$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
Цитата (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
kaww
нужно готовое решение?Вот:
/**
*
@param int|string $id ид текущей категории
*
@param array $data выборка из БД
*
@return array
*/

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
Цитата (John.Deff @ 20.04.2013 - 12:49)
у меня уже есть отобранный массив, задача работать только с ним иначе смысл?!
прочтите мой первый топик с вопросом

извините, мысли читать не умею biggrin.gif
как об этом можно было узнать из вопроса
Цитата (John.Deff @ 19.04.2013 - 11:14)
Имеются данные в БД в виде "id", "parent", "info" при помощи рекурсии делаю многоуровневое меню.


Цитата (John.Deff @ 20.04.2013 - 12:49)
у меня уже есть отобранный массив

вот и нужно было хотя бы показать дамп этого массива.
John.Deff
Цитата (kaww @ 20.04.2013 - 10:11)
нужно готовое решение?Вот:
/**
*
@param int|string $id ид текущей категории
*
@param array $data выборка из БД
*
@return array
*/

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;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.