1

私はこれを2日間続けてきましたが、完全に立ち往生しています。GoogleとSOはこれ以上私を助けることができず、何かを見落としています....

これは私が欲しいものです

Home
Typography
404 Page not found
The company
The company/Team
The company/Team/Rick
The company/Team/Rick/Opleiding
The company/Team//Rob
The company/Office
The company/Office/Contact
The company/Office/Route

これは私の配列です

    Array
(
    [0] => Array
        (
            [id] => 55
            [parent_id] => 0
            [title] => Home
            [sub] => Array
                (
                )

        )

    [1] => Array
        (
            [id] => 27
            [parent_id] => 0
            [title] => Typography
            [sub] => Array
                (
                )

        )

    [2] => Array
        (
            [id] => 56
            [parent_id] => 0
            [title] => 404 Page not found
            [sub] => Array
                (
                )

        )

    [3] => Array
        (
            [id] => 68
            [parent_id] => 0
            [title] => The company
            [sub] => Array
                (
                    [0] => Array
                        (
                            [id] => 73
                            [parent_id] => 68
                            [title] => Team
                            [sub] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 74
                                            [parent_id] => 73
                                            [title] => Rick
                                            [sub] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 79
                                                            [parent_id] => 74
                                                            [title] => Opleiding
                                                            [sub] => Array
                                                                (
                                                                )

                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [id] => 75
                                            [parent_id] => 73
                                            [title] => Rob
                                            [sub] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 76
                            [parent_id] => 68
                            [title] => Office
                            [sub] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 78
                                            [parent_id] => 76
                                            [title] => Contact
                                            [sub] => Array
                                                (
                                                )

                                        )

                                    [1] => Array
                                        (
                                            [id] => 77
                                            [parent_id] => 76
                                            [title] => Route
                                            [sub] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

)

これは私がこれまでに持っているものです

public function BuildTitle($array, &$parents = null)
    {
        $html = '';
        foreach($array as $page)
        {
            if($page['parent_id'] != 0)
            {
                $html .= $parents.'/'.$page['title'].'<br/>';
                $parents = $parents.'/'.$page['title'];
            }
            else
            {
                $html .= $page['title'].'<br/>';
                $parents = $page['title'];
            }

            $html .= $this->BuildTitle($page['sub'], $parents);
        }
        return $html;
    }

そして、それは戻ります

Home
Typography
404 Page not found
The company
The company/Team
The company/Team/Rick
The company/Team/Rick/Opleiding
The company/Team/Rick/Opleiding/Rob
The company/Team/Rick/Opleiding/Rob/Office
The company/Team/Rick/Opleiding/Rob/Office/Contact
The company/Team/Rick/Opleiding/Rob/Office/Contact/Route

親子関係は無制限です。私は何を間違っている/行方不明ですか? 前もって感謝します!

4

1 に答える 1

0

$parentsすべての反復で同じ値を変更しています。したがって、親が 0 でない限り、パスが何であれ、現在の子を追加するだけです。

たとえば、次のシナリオがあるとします。

foo
   bar
   baz

を処理するときfooは、 で始まり$parents = 'foo'ます。次に、各子を調べて更新し$parentsます。

  • bar作り$parents = $parents . '/' . $page['title'] = 'foo' . '/' . 'bar' = 'foo/bar'ます。
  • baz作り$parents = $parents . '/' . $page['title'] = 'foo/bar' . '/' . 'bar' = 'foo/bar/baz'ます。

あなたが欲しいのはこれです:

public function BuildTitle($array, $parents = null)
    {
        $html = '';
        foreach($array as $page)
        {
            if($page['parent_id'] != 0)
            {
                $html .= $parents.'/'.$page['title'].'<br/>';
                $new_parents = $parents.'/'.$page['title'];
            }
            else
            {
                $html .= $page['title'].'<br/>';
                $new_parents = $page['title'];
            }

            $html .= $this->BuildTitle($page['sub'], $new_parents);
        }
        return $html;
    }
于 2012-08-03T12:08:43.463 に答える