分类表设计中分类有pid(父id),更好一点设计有pid(父id)同时有tid(分类顶级id)
1、没有tid的情况下写的获取分类下所有子级分类的id(递归算法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/** * 找分类所有子级的id字符串 * @param $table * @param $id * User: Sam:yyzm@vip.qq.com */ function getChildId( $table , $id , $ids ) { $temp = array(); $map['pid'] = array( 'in' , $id ); $child = D( $table )->field( 'id' )->where( $map )->select(); if ( !empty( $child ) ) { foreach ( $child as $k => $v ) { $temp[] = $v['id']; } if ( !empty( $ids ) ) { //得到所有子级的id foreach ( $temp as $v ) { array_push( $ids , $v ); } } else { $ids = $temp; } //如果有子级继续递归 return getChildId( $table , $temp , $ids ); } else { return implode( ',' , (array)$ids ); } } |
2、有pid和tid时获取分类所有子级分类ID包括本身id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * 获取分类所有子类ID包括自己 * @param $tid * User: Sam:yyzm@vip.qq.com */ function getChildAllId( $tid ){ $ids = []; $id = M('category')->field('id')->where(array('tid'=>$tid))->select(); foreach($id as $k=>$v){ $ids[] = $v['id']; } $ids = implode(",",$ids); return $tid.','.$ids; } |
3、有pid和tid时获取分类所有子级分类ID不包括本身id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * 获取分类所有子类ID不包括自己 * @param $table * @param $tid * User: Sam:yyzm@vip.qq.com */ function getChildId( $table,$tid ){ $ids = []; $id = M($table)->field('id')->where(array('tid'=>$tid))->select(); foreach($id as $k=>$v){ $ids[] = $v['id']; } $ids = implode(",",$ids); return $ids; } |
转载请注明:PHP笔记 » PHP项目获取子级分类ID写的几个函数