Помогите пожалуйста с правильным решением!
Интересуют еще примеры для решения этой задачи, т.е. оптимизация, скорость выполнения...
Туго у меня с этими ветками и деревьями.
У меня получилось так (см. ниже).
Входящий идентификатор категории/подкатегории в
$id_cat.
Если
$id_cat = 100, то получим на выходе: Разделы > Раздел 1.
Если
$id_cat = 102, то получим на выходе: Разделы > Раздел 3 > Раздел 3.1.
// Построение одной ветке от текущего id_cat до самого верхнего.
// Пример.
// Разделы > Раздел 3 > Раздел 3.1
/*
id_cat parent_id title
98 0 Разделы
100 98 Раздел 1
101 98 Раздел 3
102 101 Раздел 3.1
106 98 Раздел 2
*/
// Получаем все id_cat и parent_id.
$query = "SELECT `id_cat`, `parent_id` FROM dl_category";
$result = mysql_query($query);
// Все id_cat и parent_id в массив.
while($row = mysql_fetch_assoc($result))
{
$arr_id_cat_all[] = $row['id_cat'];
$arr_parent_id_all[] = $row['parent_id'];
}
mysql_free_result($result);
// Получаем ветку id_cat'ов.
// От текущего id_cat до самого верхнего (до нулевого).
if ($id_cat != '0')
{
$id_cat_tmp = $id_cat;
for ($x = 0; $x < count($arr_id_cat_all); $x++)
{
if ($arr_id_cat_all[$x] == $id_cat_tmp)
{
// id_cat'ы в массив $branch_id_cat[].
$branch_id_cat[] = $id_cat_tmp;
// Родитель.
$id_cat_tmp = $arr_parent_id_all[$x];
if ($id_cat_tmp != '0')
{
// Нет, еще не все.
$x=0;
}
else
{
// Все id_cat'ы уже в массиве,
// в такой последовательности: 54321;
$branch_id_cat[] = $id_cat_tmp;
// Поменять местами 54321 на 12345.
for ($x = count($branch_id_cat) - 1; $x >= 0; $x--)
{
$new_branch_id_cat[] = $branch_id_cat[$x];
}
// Все...
break;
}
}
}
}
else
{
$new_branch_id_cat[] = '0';
}
// Сделать: 1,2,3,4,5
$string_branch = implode(",", $new_branch_id_cat);