【问题标题】:Looping through categories and build a category tree using the parent id遍历类别并使用父 id 构建类别树
【发布时间】:2015-08-12 00:44:20
【问题描述】:

我正在尝试使用包含类别信息的数据库。项目之间的关系仅以 parent_id 的形式存在。 我知道我可以做一些“变通办法”来达到目标​​,但必须有更好的解决方案。我可以将更多信息写入数据库,例如深度,但我确信有一个我不知道的循环/array_filter 组合。

这就是我所拥有的:

Array
(
[0] => Array
    (
        [id] => 0
        [parent_id] => 0
        [title] => All
    )

[1] => Array
    (
        [id] => 23
        [parent_id] => 0
        [title] => Nature
    )

[2] => Array
    (
        [id] => 3
        [parent_id] => 4
        [title] => Thriller
    )

[3] => Array
    (
        [id] => 4
        [parent_id] => 0
        [title] => Drama
    )

[4] => Array
    (
        [id] => 1
        [parent_id] => 0
        [title] => Crime
    )

[5] => Array
    (
        [id] => 19
        [parent_id] => 23
        [title] => Documentation
    )

[6] => Array
    (
        [id] => 20
        [parent_id] => 23
        [title] => Coverage
    )

[7] => Array
    (
        [id] => 21
        [parent_id] => 19
        [title] => Isles
    )

这就是我想要的:

Array
(
[0] => Array
    (
        [id] => 0
        [parent_id] => 0
        [title] => All
        [0] => Array
            (
                [id] => 23
                [parent_id] => 0
                [title] => Nature
                [0] => Array
                        (
                            [id] => 19
                            [parent_id] => 23
                            [title] => Documentation
                            [0] => Array
                                    (
                                        [id] => 21
                                        [parent_id] => 19
                                        [title] => Isles
                                    )
                        )
                [1] => Array
                        (
                            [id] => 20
                            [parent_id] => 23
                            [title] => Coverages
                        )
                )

        [1] => Array
            (
                [id] => 4
                [parent_id] => 0
                [title] => Drama
                [0] => Array
                        (
                            [id] => 3
                            [parent_id] => 4
                            [title] => Thriller
                        )
            )

        [2] => Array
            (
                [id] => 1
                [parent_id] => 0
                [title] => Crime
            )
    )

我用循环和 array_filter() 尝试了它,但它不起作用。我尝试在函数中使用循环并在同一循环中调用该函数,但它不起作用。然后我开始尝试仅使用 1 个子类别,但这既不是解决方案也不是解决方法。

$categories = [see first code block]
$i = -1;
$j = -1;

foreach ($categories as $cat) {
    $i++;
    if ($cat['parent_id'] > 0) {
        $j = -1;
        foreach ($categories as $cat2) {
            $j++;
            if ($cat2['id'] == $cat['parent_id']) {
                $categories[$j][] = array("id" => $cat['id'], "parent_id" => $cat['parent_id'], "title" => $cat['title']);
                unset($categories[$i]);
                continue 2;
            }
        }
    }
}

我会为每一次朝着正确方向的努力感到高兴。谢谢!

【问题讨论】:

标签: php loops for-loop categories


【解决方案1】:

我在这个答案中找到了一个可行的解决方案: https://stackoverflow.com/a/20286566/5215634

值得一提的是,只完成了一次数据库查询,结果集在 tree() 中处理。 如果我的代码准备好了,我会在这里发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2020-12-06
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多