PHP динамический многомерный массив или объекты - PullRequest
2 голосов
/ 16 июля 2009

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

class Navigation extends Database
{

    function build($parent_id = 0)
    {
        $query = 'SELECT id, name, href, parent_id 
        FROM navigation
        WHERE parent_id = '.$parent_id.' 
        ORDER BY name';
        $results = $db->query($query);
        while ($row = $results->fetch_object()) {
            $nav[$row->id] = $row;
            // echo $row;
            $this->build($row->id);
        }
        return $nav;
    }
}

Если вы прокомментируете echo $row, все работает нормально. Итак, что я хочу сделать в трехуровневой навигации:

Array
(
    [1] => stdClass Object
    (
        [id] => 1
        [name] => Home
        [href] => home.php
        [parent_id] => 0
    )
    [2] => stdClass Object
    (
        [id] => 2
        [name] => Company
        [href] => company.php
        [parent_id] => 0
    )
        [4] => stdClass Object
        (
            [id] => 4
            [name] => Company Vision
            [href] => company_vision.php
            [parent_id] => 2
        )
        [5] => stdClass Object
        (
            [id] => 5
            [name] => Company Goals
            [href] => company_goals.php
            [parent_id] => 2
        )
    [3] => stdClass Object
    (
        [id] => 3
        [name] => Products
        [href] => products.php
        [parent_id] => 0
    )
        [6] => stdClass Object
        (
            [id] => 6
            [name] => Products Shoes
            [href] => products_shoes.php
            [parent_id] => 3
        )
            [7] => stdClass Object
            (
                [id] => 7
                [name] => Nike
                [href] => products_shoes_nike.php
                [parent_id] => 6
            )

)

Просто в качестве примера, чтобы массив динамически делал это:

$nav[$row->id] = $row; // Home
$nav[$row->id] = $row; // Company
$nav[2][$row->id] = $row; // Company Vision
$nav[2][$row->id] = $row; // Company Goals
$nav[$row->id] = $row; // Products
$nav[3][$row->id] = $row; // Products Shoes
$nav[3][6][$row->id] = $row; // Products Shoes Nike

Заранее спасибо.

Вопрос: Как создать рекурсивную функцию / метод и сохранить рекурсивную информацию в переменной, а не повторять результаты?

Вопросы: (a) PHP перезаписывает переменную каждый раз, когда он вызывает себя рекурсивно (б) Решением было бы динамическое создание массива на лету, но я не знаю, возможно ли это

1 Ответ

2 голосов
/ 16 июля 2009

Я подозреваю, что вам нужен алгоритм вложенных множеств http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...