php无限极分类thinkphp,thinkphp5使用无限极分类

本文实例为大家分享了thinkphp5使用无限极分类的具体代码,供大家参考,具体内容如下

1. 先根据普通递归完成无限极分类

2. 再根据分号的类的level 添加字符,再次存入数组的_name字段,最后按照_name字段输出

/**

* 获得树状数据

* @param $data 数据

* @param $title 数据库中字段名

* @param string $fieldPri 数据库中主键id

* @param string $fieldPid 数据库中父id

* @return array

*/

static public function tree($data, $title, $fieldPri = 'cid', $fieldPid = 'pid')

{

if (!is_array($data) || empty($data))

return array();

$arr = Data::channelList($data);

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

$str = "";

if ($v['_level'] > 2) {

for ($i = 1; $i < $v['_level'] - 1; $i++) {

$str .= "│ ";

}

}

if ($v['_level'] != 1) {

$t = $title ? $v[$title] : "";

if (isset($arr[$k + 1]) && $arr[$k + 1]['_level'] >= $arr[$k]['_level']) {

$arr[$k]['_name'] = $str . "├─ " . $v['_html'] . $t;

} else {

$arr[$k]['_name'] = $str . "└─ " . $v['_html'] . $t;

}

} else {

$arr[$k]['_name'] = $v[$title];

}

}

//设置主键为$fieldPri

$data = array();

foreach ($arr as $d) {

$data[$d[$fieldPri]] = $d;

}

return $data;

}

/**

* 获得所有子栏目

* @param $data 栏目数据

* @param int $pid 操作的栏目

* @param string $html 栏目名前字符

* @param string $fieldPri 表主键

* @param string $fieldPid 父id

* @param int $level 等级

* @return array

*/

static public function channelList($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)

{

$data = self::_channelList($data, $pid, $html, $fieldPri, $fieldPid, $level);

if (empty($data))

return $data;

foreach ($data as $n => $m) {

if ($m['_level'] == 1)

continue;//结束单次循环

$data[$n]['_first'] = false;

$data[$n]['_end'] = false;

if (!isset($data[$n - 1]) || $data[$n - 1]['_level'] != $m['_level']) {

$data[$n]['_first'] = true;

}

if (isset($data[$n + 1]) && $data[$n]['_level'] > $data[$n + 1]['_level']) {

$data[$n]['_end'] = true;

}

}

//更新key为栏目主键

$category=array();

foreach($data as $d){

$category[$d[$fieldPri]]=$d;

}

return $category;

}

//只供channelList方法使用

/**

* 获得所有子栏目

* @param $data 栏目数据

* @param int $pid 操作的栏目

* @param string $html 栏目名前字符

* @param string $fieldPri 表主键

* @param string $fieldPid 父id

* @param int $level 等级

* @return array

*/

static private function _channelList($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)

{

if (empty($data))

return array();

$arr = array();

foreach ($data as $v) {

$id = $v[$fieldPri];

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

$v['_level'] = $level;

$v['_html'] = str_repeat($html, $level - 1);

$arr[] = $v;

$tmp = self::_channelList($data, $id, $html, $fieldPri, $fieldPid, $level + 1);

$arr = array_merge($arr, $tmp);//array_merge把两个数组整合为一个数组

}

}

return $arr;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值