Работаю с категориями на сайте, делаю выборку всех вложенных категорий, использую рекурсию, поскольку уровень вложенности может быть бесконечным. Пример меню.
Родительская
==Подкатегория 1
====Подкатегория 11
====Подкатегория 12
====Подкатегория 13
====Подкатегория 14
==Подкатегория 2
==Подкатегория 3
==Подкатегория 4
При нахождении в родительской категории скрипт должен выбрать из базы все ID вложенных категорий.
Вот скрипт.
// Show internal goods
function ShowInternalCategories ($c_id) {
$q_1 = db_query("SELECT categoryID FROM ".CATEGORIES_TABLE." WHERE `parent`='$c_id' AND `visible`='yes'");
while ($row_1 = db_fetch_row($q_1)) {
$q_2 = db_query("SELECT categoryID FROM ".CATEGORIES_TABLE." WHERE `parent`='".$row_1[0]."' AND `visible`='yes'");
if (mysql_num_rows ($q_2) > 0) {
ShowInternalCategories ($row_1[0]);
}
$internal_cat[] = $row_1[0];
}
// Если здесь перебрать $internal_cat с помощью foreach, все вложенные категории будут отображены
return $internal_cat;
}
foreach (ShowInternalCategories ($categoryID) as $key=>$val) {
echo $val." "; // Здесь же отображены только категории второго уровня, а третий уровень игнорируется
}
Комментариями в скрипте указал, где проблема. Вчера полночи голову ломал, пробовал по-всякому - не работает как надо.
Как вывести все вложенные категории вне функции?