dongqian1893 2011-09-08 21:38
浏览 66

用于创建新的多维数组的递归函数

Hello i have a navigation array like below.

I have to remove some nodes wheres 'durum' condition eq to 0.

And note, if it is a parent node and it equals to 0, none of descendants will be included. I have to make it with a recursive function like below. But i couldn't succeed it.

Thank you.

function visibleCheck(&$array)
{
       $result = array();

        foreach ($array as $key => $value) {

            if($value['durum'] == 1)
            {       

                if(isset($value['children']))
                {


                    $this->visibleCheck($value['children']);

                }   
                $result[] = $value;
            }

        }
        return $result;
}


Array
(
[0] => Array
    (
        [id] => 391
        [name] => Ana Sayfa
        [link] => Ana-Sayfa
        [durum] => 1
        [visible] => 1
        [lft] => 2
        [rgt] => 3
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_empty
        [user_level] => 0
        [page_id] => 
        [target] => _parent
        [nolink] => 0
        [default] => 1
        [usort] => 
        [search] => 0
    )

[1] => Array
    (
        [id] => 393
        [name] => Hakkımızda
        [link] => Hakkimizda
        [durum] => 1
        [visible] => 1
        [lft] => 6
        [rgt] => 7
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_content
        [user_level] => 0
        [page_id] => 1
        [target] => _parent
        [nolink] => 0
        [default] => 0
        [usort] => 
        [search] => 0
    )

[2] => Array
    (
        [id] => 394
        [name] => Referanslar
        [link] => Referanslar
        [durum] => 1
        [visible] => 1
        [lft] => 8
        [rgt] => 25
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_seperator
        [user_level] => 0
        [page_id] => 
        [target] => _parent
        [nolink] => 1
        [default] => 0
        [usort] => 
        [search] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 403
                        [name] => Teslim Edilen Projeler
                        [link] => Teslim-Edilen-Projeler
                        [durum] => 0
                        [visible] => 0
                        [lft] => 9
                        [rgt] => 20
                        [lang_id] => 1
                        [menu_id] => 10
                        [slug] => comp_content
                        [user_level] => 0
                        [page_id] => 33
                        [target] => _parent
                        [nolink] => 0
                        [default] => 0
                        [usort] => 
                        [search] => 0
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 405
                                        [name] => Aegean - 30m
                                        [link] => Aegean-30m
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 10
                                        [rgt] => 11
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_content
                                        [user_level] => 0
                                        [page_id] => 11
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [1] => Array
                                    (
                                        [id] => 406
                                        [name] => Caner IV - 40m.
                                        [link] => Caner-IV-40m
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 12
                                        [rgt] => 13
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_content
                                        [user_level] => 0
                                        [page_id] => 13
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [2] => Array
                                    (
                                        [id] => 407
                                        [name] => Carpediem
                                        [link] => Carpediem
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 14
                                        [rgt] => 15
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_content
                                        [user_level] => 0
                                        [page_id] => 15
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [3] => Array
                                    (
                                        [id] => 408
                                        [name] => Kaya Güneri V
                                        [link] => Kaya-Guneri-V
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 16
                                        [rgt] => 17
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_content
                                        [user_level] => 0
                                        [page_id] => 17
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [4] => Array
                                    (
                                        [id] => 409
                                        [name] => Take it easier
                                        [link] => Take-it-easier
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 18
                                        [rgt] => 19
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_content
                                        [user_level] => 0
                                        [page_id] => 21
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                            )

                    )

                [1] => Array
                    (
                        [id] => 404
                        [name] => İnşaa Halindeki Projeler
                        [link] => Insaa-Halindeki-Projeler
                        [durum] => 0
                        [visible] => 0
                        [lft] => 21
                        [rgt] => 24
                        [lang_id] => 1
                        [menu_id] => 10
                        [slug] => comp_content
                        [user_level] => 0
                        [page_id] => 35
                        [target] => _parent
                        [nolink] => 0
                        [default] => 0
                        [usort] => 
                        [search] => 0
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 410
                                        [name] => SeaWide
                                        [link] => SeaWide
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 22
                                        [rgt] => 23
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_content
                                        [user_level] => 0
                                        [page_id] => 19
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                            )

                    )

            )

    )

[3] => Array
    (
        [id] => 412
        [name] => Yat Bakım & Onarım
        [link] => Yat-Bakim-Onarim
        [durum] => 1
        [visible] => 1
        [lft] => 26
        [rgt] => 45
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_content
        [user_level] => 0
        [page_id] => 29
        [target] => _parent
        [nolink] => 0
        [default] => 0
        [usort] => 
        [search] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 417
                        [name] => Ahşap
                        [link] => Ahsap
                        [durum] => 0
                        [visible] => 0
                        [lft] => 27
                        [rgt] => 32
                        [lang_id] => 1
                        [menu_id] => 10
                        [slug] => comp_empty
                        [user_level] => 0
                        [page_id] => 
                        [target] => _parent
                        [nolink] => 0
                        [default] => 0
                        [usort] => 
                        [search] => 0
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 420
                                        [name] => Gövde
                                        [link] => Govde
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 28
                                        [rgt] => 29
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_empty
                                        [user_level] => 0
                                        [page_id] => 
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [1] => Array
                                    (
                                        [id] => 421
                                        [name] => İç tasarım
                                        [link] => Ic-tasarim
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 30
                                        [rgt] => 31
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_empty
                                        [user_level] => 0
                                        [page_id] => 
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                            )

                    )

                [1] => Array
                    (
                        [id] => 418
                        [name] => Komposit
                        [link] => Komposit
                        [durum] => 0
                        [visible] => 1
                        [lft] => 33
                        [rgt] => 38
                        [lang_id] => 1
                        [menu_id] => 10
                        [slug] => comp_empty
                        [user_level] => 0
                        [page_id] => 
                        [target] => _parent
                        [nolink] => 0
                        [default] => 0
                        [usort] => 
                        [search] => 0
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 422
                                        [name] => Gövde
                                        [link] => Govde
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 34
                                        [rgt] => 35
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_empty
                                        [user_level] => 0
                                        [page_id] => 
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [1] => Array
                                    (
                                        [id] => 423
                                        [name] => İç tsarım
                                        [link] => Ic-tsarim
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 36
                                        [rgt] => 37
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_empty
                                        [user_level] => 0
                                        [page_id] => 
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                            )

                    )

                [2] => Array
                    (
                        [id] => 419
                        [name] => Çelik
                        [link] => Celik
                        [durum] => 0
                        [visible] => 1
                        [lft] => 39
                        [rgt] => 44
                        [lang_id] => 1
                        [menu_id] => 10
                        [slug] => comp_empty
                        [user_level] => 0
                        [page_id] => 
                        [target] => _parent
                        [nolink] => 0
                        [default] => 0
                        [usort] => 
                        [search] => 0
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 424
                                        [name] => Gövde
                                        [link] => Govde
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 40
                                        [rgt] => 41
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_empty
                                        [user_level] => 0
                                        [page_id] => 
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                                [1] => Array
                                    (
                                        [id] => 425
                                        [name] => İç tasarım
                                        [link] => Ic-tasarim
                                        [durum] => 1
                                        [visible] => 1
                                        [lft] => 42
                                        [rgt] => 43
                                        [lang_id] => 1
                                        [menu_id] => 10
                                        [slug] => comp_empty
                                        [user_level] => 0
                                        [page_id] => 
                                        [target] => _parent
                                        [nolink] => 0
                                        [default] => 0
                                        [usort] => 
                                        [search] => 0
                                    )

                            )

                    )

            )

    )

[4] => Array
    (
        [id] => 396
        [name] => Aksesuarlar
        [link] => Aksesuarlar
        [durum] => 1
        [visible] => 1
        [lft] => 46
        [rgt] => 47
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_content
        [user_level] => 0
        [page_id] => 5
        [target] => _parent
        [nolink] => 0
        [default] => 0
        [usort] => 
        [search] => 0
    )

[5] => Array
    (
        [id] => 395
        [name] => Brokerlik
        [link] => Brokerlik
        [durum] => 1
        [visible] => 1
        [lft] => 48
        [rgt] => 49
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_category_blog
        [user_level] => 0
        [page_id] => 
        [target] => _parent
        [nolink] => 0
        [default] => 0
        [usort] => 
        [search] => 0
    )

[6] => Array
    (
        [id] => 397
        [name] => İletişim
        [link] => Iletisim
        [durum] => 1
        [visible] => 1
        [lft] => 50
        [rgt] => 53
        [lang_id] => 1
        [menu_id] => 10
        [slug] => comp_contact
        [user_level] => 0
        [page_id] => 
        [target] => _parent
        [nolink] => 0
        [default] => 0
        [usort] => 
        [search] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 427
                        [name] => deneme
                        [link] => deneme
                        [durum] => 0
                        [visible] => 1
                        [lft] => 51
                        [rgt] => 52
                        [lang_id] => 1
                        [menu_id] => 10
                        [slug] => comp_content
                        [user_level] => 0
                        [page_id] => 37
                        [target] => _parent
                        [nolink] => 0
                        [default] => 0
                        [usort] => 
                        [search] => 0
                    )

            )

    )

)

  • 写回答

1条回答 默认 最新

  • duanben4771 2011-09-15 03:29
    关注

    Try this:

    function visibleCheck($test) {
        $result = array();
        foreach($test as $key => $value) {
            if(isset($value['durum']) && $value['durum'] != 0) {
                if(isset($value['children'])) {
                    $value['children']= visibleCheck($value['children']);
                }
                $result[$key] = $value;
            }
        }
        return $result;
    }
    
    $test = array();
    $test[0] = array();
    $test[1] = array();
    $test[2] = array();
    $test[3] = array();
    $test[4] = array();
    
    $test[0]["durum"]=0;
    $test[1]["durum"]=1;
    $test[2]["durum"]=1;
    $test[3]["durum"]=0;
    $test[4]["durum"]=1;
    
    $test[0]["children"]= array();
    $test[1]["children"]= array(
        0=> array(
            'durum'=>1,
            'some'=>'some more',
            'children'=>array(
                0=>array(
                    'durum'=>0,
                    'some'=>'some more',
                    'children'=>array(
                        0=>array(),
                        1=>array()
                    )
                ),
                1=>array(
                    'durum'=>1,
                    'some'=>'some more',
                    'children'=>array(
                        0=>array(),
                        1=>array()
                    )
                ),
                2=>array(
                    'durum'=>1,
                    'some'=>'some more',
                    'children'=>array(
                        0=>array(
                            0=>array(
                                'durum'=>1,
                                'some'=>'some more',
                                'children'=>array(
                                    0=>array(),
                                    1=>array()
                                )
                            ),
                            1=>array(
                                'durum'=>0,
                                'some'=>'some more',
                                'children'=>array(
                                    0=>array(),
                                    1=>array()
                                )
                            ),
                        ),
                        1=>array()
                    )
                ),
            ),
        ),
        1=> array(
            'durum'=>0,
            'some'=>'some more',
            'children'=>array(
                0=>array(
                    'durum'=>0,
                    'some'=>'some more',
                    'children'=>array(
                        0=>array(),
                        1=>array()
                    )
                ),
            ),
        )
    );
    $test[2]["children"]= array();
    $test[3]["children"]= array();
    $test[4]["children"]= array();
    
    echo "Before: <pre>";
    echo print_r($test);
    echo "</pre>After<pre>";
    echo print_r(visibleCheck($test));
    
    评论

报告相同问题?

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算