рекурсивная функция для получения всех дочерних категорий

Вот то, что я пытаюсь сделать: - мне нужна функция, что при передаче как аргумент идентификатор (для категории вещей) обеспечит все подкатегории и sub-sub категории и sub-sub-sub.. и т.д. - я думал для использования рекурсивной функции, так как я не знаю количество подкатегорий их подподкатегории и так далее, таким образом, вот то, что я попытался сделать до сих пор

function categoryChild($id) {

    $s = "SELECT * FROM PLD_CATEGORY WHERE PARENT_ID = $id";
    $r = mysql_query($s);

    if(mysql_num_rows($r) > 0) {

        while($row = mysql_fetch_array($r))
            echo $row['ID'].",".categoryChild($row['ID']);
    }
    else {
        $row = mysql_fetch_array($r);
        return $row['ID'];
    }
}

Если я буду использовать возврат вместо эха, то я не получу тот же результат. Я нуждаюсь в некоторой помощи, чтобы зафиксировать это или переписать ее с нуля

11
задан skaffman 8 October 2010 в 11:09
поделиться

2 ответа

Мне было трудно разобраться с вашей функцией. Я думаю, что это сделает то, что вы хотите. Она получает все дочерние элементы категории с ID $id, а также их дочерние элементы (таким образом, получается эффект подкатегории, подкатегории, который вы хотели).

function categoryChild($id) {
    $s = "SELECT ID FROM PLD_CATEGORY WHERE PARENT_ID = $id";
    $r = mysql_query($s);

    $children = array();

    if(mysql_num_rows($r) > 0) {
        # It has children, let's get them.
        while($row = mysql_fetch_array($r)) {
            # Add the child to the list of children, and get its subchildren
            $children[$row['ID']] = categoryChild($row['ID']);
        }
    }

    return $children;
}

Эта функция вернет:

$var = array(
        'categoryChild ID' => array(
                'subcategoryChild ID' => array(
                        'subcategoryChild child 1' => array(),
                        'subcategoryChild child 2' => array()
                )
        ),
        'anotherCategoryChild ID' => array() # This child has no children of its own
);

В основном она возвращает массив с ID дочерней категории и массив, содержащий ID ее дочерних категорий. Надеюсь, это вам поможет.

13
ответ дан 3 December 2019 в 04:13
поделиться

дерево базы данных в многомерный массив

<?php
function getTree($rootid)
{
   $arr = array();

   $result = mysql_query("select * from PLD_CATEGORY where PARENT_ID='$rootid'");
   while ($row = mysql_fetch_array($result)) { 
     $arr[] = array(
       "Title" => $row["Title"],
       "Children" => getTree($row["id"])
     );
   }
   return $arr;
}
?>
5
ответ дан 3 December 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: