php 无限极分类树形图,ThinkPhp 实现 无限极分类及树状结构 附加使用例子

PS: 最下方有PHP文字,直接copy使用

FOR examle: 例子

$list = Db::name('user')->field('name,id,pid')->select();

$array =Category::toLayer($list);

结果

1a721bf333dd?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

Php 代码文件

class Category {

//一维数组

static public function toLevel($cate, $delimiter = '———', $parent_id = 0, $level = 0) {

$arr = array();

foreach ($cate as $v) {

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

$v['level'] = $level + 1;

$v['delimiter'] = str_repeat($delimiter, $level);

$arr[] = $v;

$arr = array_merge($arr, self::toLevel($cate, $delimiter, $v['id'], $v['level']));

}

}

return $arr;

}

/**

* 组成多维数组

* @param $cate 将要被转换为树形的

* @param string $name 子节点名字 默认 child

* @param int $pid 父类ID, 第一级的 pid 默认为0,根据情况自己更改

* @return array

*/

static public function toLayer($cate, $name = 'child', $pid = 0){

$arr = array();

foreach ($cate as $v) {

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

$v[$name] = self::toLayer($cate, $name, $v['id']);

$arr[] = $v;

}

}

return $arr;

}

//一维数组(同模型)(model = tablename相同),删除其他模型的分类

static public function getLevelOfModel($cate, $tablename = 'article') {

$arr = array();

foreach ($cate as $v) {

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

$arr[] = $v;

}

}

return $arr;

}

//一维数组(同模型)(modelid),删除其他模型的分类

static public function getLevelOfModelId($cate, $modelid = 0) {

$arr = array();

foreach ($cate as $v) {

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

$arr[] = $v;

}

}

return $arr;

}

//传递一个子分类ID返回他的所有父级分类

static public function getParents($cate, $id) {

$arr = array();

foreach ($cate as $v) {

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

$arr[] = $v;

$arr = array_merge(self::getParents($cate, $v['pid']), $arr);

}

}

return $arr;

}

//传递一个子分类ID返回他的同级分类

static public function getSameCate($cate, $id) {

$arr = array();

$self = self::getSelf($cate, $id);

if (empty($self)) {

return $arr;

}

foreach ($cate as $v) {

if ($v['id'] == $self['pid']) {

$arr[] = $v;

}

}

return $arr;

}

//判断分类是否有子分类,返回false,true

static public function hasChild($cate, $id) {

$arr = false;

foreach ($cate as $v) {

if ($v['pid'] == $id) {

$arr = true;

return $arr;

}

}

return $arr;

}

//传递一个父级分类ID返回所有子分类ID

/**

*@param $cate 全部分类数组

*@param $pid 父级ID

*@param $flag 是否包括父级自己的ID,默认不包括

**/

static public function getChildsId($cate, $pid, $flag = 0) {

$arr = array();

if ($flag) {

$arr[] = $pid;

}

foreach ($cate as $v) {

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

$arr[] = $v['id'];

$arr = array_merge($arr , self::getChildsId($cate, $v['id']));

}

}

return $arr;

}

//传递一个父级分类ID返回所有子级分类

static public function getChilds($cate, $pid) {

$arr = array();

foreach ($cate as $v) {

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

$arr[] = $v;

$arr = array_merge($arr, self::getChilds($cate, $v['id']));

}

}

return $arr;

}

//传递一个分类ID返回该分类相当信息

static public function getSelf($cate, $id) {

$arr = array();

foreach ($cate as $v) {

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

$arr = $v;

return $arr;

}

}

return $arr;

}

//传递一个分类ID返回该分类相当信息

static public function getSelfByEName($cate, $ename) {

$arr = array();

foreach ($cate as $v) {

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

$arr = $v;

return $arr;

}

}

return $arr;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值