首页 > 代码库 > php 三级导航及无限级扩展的一些心得
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‘];
}
}
}
}
}
如果这是四级 五级的话 就按照样式继续填写
php 三级导航及无限级扩展的一些心得