1

多次元配列を介して作成されているメニューがあります。現在のアイテムは、そのurl属性を現在のリクエストと照合することによって設定されます。私はこの価値を両親に伝えたいのですが、私はそれを機能させることができません-私は近くにいると確信していますが、それは少しトリッキーです。配列は次のとおりです。

Array
(
  [children] => Array
    (
        [Home] => Array
            (
                [url] => /
            )

        [The Challenge] => Array
            (
                [url] => /challenge
            )

        [The Finish] => Array
            (
                [url] => /finish
            )

        [Latest News] => Array
            (
                [url] => /latest_news
            )

        [Participants] => Array
            (
                [url] => /participants
                [children] => Array
                    (
                        [Some guy] => Array
                            (
                                [url] => /participants/some_guy
                                [children] => Array
                                    (
                                        [Hats] => Array
                                            (
                                                 [url] => /participants/some_guy/hats
                                                 [current] => 1

基本的に、[current]フラグが見つかるまですべてのアイテムを反復処理し、その値を親に伝播する関数を探しています。メニューの深さに制限はありません。

上記の例では、次のようになります。

Array
(
  [children] => Array
    (
        [Home] => Array
            (
                [url] => /
            )

        [The Challenge] => Array
            (
                [url] => /challenge
            )

        [The Finish] => Array
            (
                [url] => /finish
            )

        [Latest News] => Array
            (
                [url] => /latest_news
            )

        [Participants] => Array
            (
                [url] => /participants
                [current] => 1
                [children] => Array
                    (
                        [Some guy] => Array
                            (
                                [url] => /participants/some_guy
                                [current] => 1
                                [children] => Array
                                    (
                                        [Hats] => Array
                                            (
                                                 [url] => /participants/some_guy/hats
                                                 [current] => 1
4

2 に答える 2

3

お気に入り

 function set_current($menu) {
    if(!is_array($menu)) return 0;
    if(isset($menu['current'])) return 1;
    foreach($menu as $sub) {
        if(set_current($sub))
            return $menu['current'] = 1;
    }
    return 0;
}

テストに適さないデータを投稿したため、テストされていません(ああ、なぜ彼らはそれらのvar_dumpsを投稿し続けるのですか?)

于 2010-02-19T13:25:09.450 に答える
1

変更された作業バージョンは次のとおりです。

function set_current(&$menu) {
    if(!is_array($menu)) return false;
    if(isset($menu['current'])) return true;
    if(isset($menu['children'])){
        foreach($menu['children'] as $key => $value) {
            if(set_current($menu['children'][$key])){
                $menu['current'] = true;
                return true;
            }
        }
    }
    return false;
}

助けてくれてありがとう; 私は過去数日間、何度も何度も親密になりましたが、それを仕上げるために少し違った書き方をする必要がありました。

于 2010-02-19T15:07:30.330 に答える