Çok boyutlu bir dizi yukarı bir akım menü öğesi bayrağı yaymak nasıl?

2 Cevap php

Ben çok boyutlu bir dizi ile inşa ediliyor bir menü var. Bir akım öğesi geçerli isteği ile url niteliği eşleştirerek ayarlanır. Ben onun anne kadar kabarcık bu değeri istiyorum, ama beni yaşam için çalışma alınamıyor - Ben yakın oldum eminim, ama bu biraz zor ispat ediyor. İşte dizi var:

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

O [geçerli] bayrak, daha sonra anne kadar geri o değeri yaymak bulana kadar Esasen, ben her madde yinelemenize.Ölçütlere bir işlev arıyorum. Menüsünden derinliği konusunda belirli sınırlar yoktur.

Yukarıdaki örnek için, bu neden olur:

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

2 Cevap

İşte değiştirilmiş, çalışma versiyonu bulunuyor:

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;
}

Yardımın için teşekkürler; Ben sadece bunu bitirmek için biraz farklı yazılı görmek için gerekli son birkaç gün içinde tekrar tekrar çok yakın olmuştu.

gibi

 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;
}

Eğer test için uygun verileri yayınlanmıştır çünkü, test değil (ah canım, neden, neden onlar bu var_dumps gönderme duruyorsun?)