php 三级导航及无限级扩展的一些心得

前段时间给个客户做网站,这个导航分的比较细;自己在做的时候有些心得。记录下来 供大家参考

数据库导航表的对应关系  

ID = 自增 唯一  

PID = 二级的PID 对应一级 ID   三级的PID 对应二级的ID

.....以此类推 

建立之后取出来的时候 就是

Array (

[0] => Array (

        [cat_id] => 1

        [cat_pid] => 0

)

[1] => Array (

        [cat_id] => 2

        [cat_pid] =>1

)

[2] => Array (

        [cat_id] => 3

        [cat_pid] =>2

)

)

就是这样的 那么为了把各个导航之间的关系弄明白 我们就要他变成这样

Array (

        [0] => Array (  

                    [cat_id] => 1  

                    [cat_pid] =>0

                    [has_son] => Array (

                                      [0] => Array (

                                                     [cat_id] => 2

                                                     [cat_pid] => 1

                                                     [has_son2] => Array (

                                                                         [0] => Array (

                                                                         [cat_id] => 3

                                                                         [cat_pid] => 2                                                                     )

                                                            )

                                                   )

                   )

要显示成这种明确的层级关系  那么首先要将数据取出来(......)

比如 $get 这个是数据库取出来的数据的话 

$cat = array();
$conut = 0;

function  方法名(){

   if (!empty($getCate)) {

     while ($getCate) {  //启动一个循环 用摘除的方式来完成组合

                   //生成所有的一级分类

                   if ($conut == 0) {

                          foreach ($getCate as $k => $v) {

                                  if ($v['cat_pid'] == 0) {

                                             $cat[] = $v;

                                             unset($getCate[$k]); //讲收集到的一级导航从数组中摘除

                                   }

                            }

                     }

                 $conut++;

                 //生成二级分类

                 if (!empty($cat)) {

                       foreach ($cat as $pk => $pv) {

                                   foreach ($getCate as $sk => $sv) {

                                              if ($sv['cat_pid'] == $pv['cat_id']) {

                                                          $cat[$pk]['has_son'][] = $sv;

                                                          unset($getCate[$sk]);

                                                }

                                      }

                            }

                 }

                //生成三级分类

               if (!empty($cat)) {

                    foreach ($cat as $pk => $pv) {

                                if (!empty($pv['has_son'])) {

                                        foreach ($pv['has_son'] as $sk2 => $sv2) {

                                                      foreach ($getCate as $sk3 => $sv3) {

                                                                   if ($sv3['cat_pid'] == $sv2['cat_id']) {

                                                                               $cat[$pk]['has_son'][$sk2]['has_son2'][] = $sv3;

                                                                               unset( $getCate [$sk3] );

                                                                   }

                                                       }

                                            }

                                 }

                        }

              }

 

        }

    }  

}

以上是生成3级导航的方法  需要四级  五级的话 可以接着继续往下写.....

查询的话 可以写在方法中  生成三级分类结束后 写

$cat_id 是你的索引 比如说是 一级的ID  二级的PID  之类的

           if ( !empty($cat_id) ){

                   //一级导航下的子类

                  foreach ( $cat as $k => $v ){

                          if ( $cat_id == $v['cat_id'] ){

                                  if ( !empty( $v['has_son'] )){

                                            return $cat[$k]['has_son'];

                                  }else{

                                           return array();

                                 }

                          }

                  }

                  //二级导航下的子类

                   foreach ( $cat as $pk => $pv ){

                         if (!empty($pv['has_son'])){

                                 foreach ($pv['has_son'] as $sk => $sv){

                                          if ($sv['cat_id'] == $cat_id){

                                                  return  $sv['has_son2'];

                                        }

                                 }

                         }

                   }

          }

如果这是四级 五级的话 就按照样式继续填写

posted @ 2017-02-15 17:48  醉梦伊人  阅读(2643)  评论(0编辑  收藏  举报