Странная ошибка логики возвращаемого значения из PHP-рекурсии

Мне нужно написать рекурсивную функцию для поиска по набору заголовков родительских и дочерних ссылок, а затем получить имена значений встроенных ключей для каждого заголовка. Ex. Одежда-> мужчин-> Обувь. Теперь к каждой категории прикреплено неизвестное количество значений. У меня есть функция, которая может успешно повторить все эти значения через родителей. Но когда я пытаюсь получить возвращаемое значение из функции, ему не хватает некоторых, и я не могу понять, почему: /.

Код ниже

public function getFamilies($cat){
            $objCurrentCategory = Category::Load($cat); // creates a QCodo object of the passed category ID.

        $str_Query = "SELECT DISTINCT p.family
                      FROM xlsws_product p, xlsws_product_category_assn pc
                      WHERE p.rowid=pc.product_id
                      AND pc.category_id=".$cat; // sql query to retrieve all Families relating to this category.

        $objFamilyDb = Family::GetDatabase(); // retrieves the QCodo database object for Family to execute queries against.
        $objFamilies = Family::InstantiateDbResult($objFamilyDb->Query($str_Query)); // executes the query and saves the result.

        foreach($objFamilies as $family){ // for each family returned, get the family name and add it to the array of names.
            if ($family->Family !== ""){
                $families [] = $family->Family;
            }
        }

        if ($objCurrentCategory->ChildCount > 0){ // if current category has children, create a list of all children rowids.
            $str_Query = "SELECT rowid FROM xlsws_category
                          WHERE parent=".$objCurrentCategory->Rowid; // query to get all children of the category.
            $objChildCategoriesDb = Category::GetDatabase(); // retrieves the QCodo database object for Category to execute queries against.
            $objChildCategories = Category::InstantiateDbResult($objChildCategoriesDb->Query($str_Query)); // executes the query and saves the result.

            foreach($objChildCategories as $child){ // passes through the children to get their families.
                //$families [] = KG::getFamilies($child->Rowid);
                $childFam = KG::getFamilies($child->Rowid);
            }
        }

        $compiled = KG::compileFamilies($childFam); // helper function, not important.


        foreach($compiled as $compile){
            $families[] = $compile;
        }

        foreach($families as $familyt){ // this echo statement correctly displays all names.
            //echo ":".$familyt."<br />";
        }

        return $families;
    }

Таким образом, это отображает все имена через echo на экран во время выполнения функций, и массив WITHIN функции также может быть выведен на экран. Но когда я пытаюсь вернуть все имена из возвращенного результата на другой странице, мне не хватает связки имен.

РЕДАКТИРОВАТЬ Похоже, что переменная $ family не сохраняется при каждом рекурсивном вызове getFamilies, а возвращает в конце только дочерние элементы, а не дочерние элементы и всех их родителей.

1 ответ

Исправлена. проблема заключалась в том, что я пытался очистить массив в том же рекурсивном операторе, и он отбрасывал все, так как возвращался очищающий "вспомогательный метод", а не полный ассоциативный массив семейств. Вздох @ я за то, что забыл.

Другие вопросы по тегам