"1"和"1.1"应该作为key而不是value,事情就好办得多了

解决方案 »

  1.   

    为什么?
    1和1.1是标题,是用于显示的,可能有重复的。
    不重复的倒是有一个id。
    并,判断条件是status。目的是为了管理菜单中的连续性,比如,我具有菜单项A下的子菜单项B的权限,但我不具有A的权限,在显示树形菜单的时候,必须让A也显示出来,B才能显示。
      

  2.   

    递归遍历的思路有些混乱,能否再帮忙点拨?
    $t = array(
      0 => array(
        title => '1',
        status => 0,
        child => array(
          title => '1.1',
          status => 1,
       )
      )
    );function r( $t ){
      foreach( $t as $k => $v ){
        if ( $v[ 'status' ] == 1 )
           print $v[ 'title' ];
        /*
         *  疑问,采用遍历,这是不知道子节点的数据情况,假如本级数据status为0,那么就无法判断
         */
        if ( $v[ 'child' ] )
           r( $v[ 'child' ] );
      }
    }
    r( $t );===================================================
    或,除非分两步,先遍历数组,增加一个动态的数组键。
    但,这有个效率的问题。
    function r2( $t ){
      foreach( $t as $k => $v ){
        if ( $v[ 'status' ] == 1 )
           // 这里如何设置当前数组单元的ok键为1?
           $v[ 'ok' ] == 1;
        /*
         *  疑问,在这个地方需要,这里如何向上遍历,将所有上级节点ok设置为1?
         */
        if ( $v[ 'child' ] )
           r2( $v[ 'child' ] );
      }
    }print_r ( r2( $t ) );
      

  3.   

    如果按你的说法,1和1.1是不可能重复的,你自己再想想这个问题和无级分类是一样的道理,用parent的方法你就必须递归
    还好1和1.1可以通过“.”来拆分判断是否从属关系
      

  4.   

    谢谢你的关注,可能是我叙述的不够准确。
    1和1.1是表示标题,而不是id路径,标题是可能存在重复的。xuzuning(唠叨) 在我的另一个帖子里给里一个相对较好的思路。
    http://community.csdn.net/Expert/topic/4938/4938090.xml?temp=.8629572