Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例


Posted in PHP onApril 04, 2020

本文实例讲述了Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点。分享给大家供大家参考,具体如下:

list_to_tree 使用起来十分方便,详细可查看手册。因为我在用的时候需要同时列出所有节点,所以写了一个递归函数,拿出来供大家参考。

public function index(){
  Load('extend');      //加载扩展方法
  $Category=D('Category');
  $list=$Category->order('sort desc')->select();//实现同级节点排序
  $list=list_to_tree($list,'id','fid'); //详细参数见手册
  $list=$this->findChild($list);
  dump($list);
}
protected function findChild($arr){
    static $tree=array();
    foreach ($arr as $key=>$val){
        $tree[]=$val;
        if (isset($val['_child'])){
          $this->findChild($val['_child']);
        }
      }
  return $tree;
}
/**
 * 把返回的数据集转换成Tree
 * @access public
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 * @return array
 */
function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) {
  // 创建Tree
  $tree = array();
  if(is_array($list)) {
    // 创建基于主键的数组引用
    $refer = array();
    foreach ($list as $key => $data) {
      $refer[$data[$pk]] =& $list[$key];
    }
    foreach ($list as $key => $data) {
      // 判断是否存在parent
      $parentId = $data[$pid];
      if ($root == $parentId) {
        $tree[] =& $list[$key];
      }else{
        if (isset($refer[$parentId])) {
          $parent =& $refer[$parentId];
          $parent[$child][] =& $list[$key];
        }
      }
    }
  }
  return $tree;
}

/**
 * 对查询结果集进行排序
 * @access public
 * @param array $list 查询结果
 * @param string $field 排序的字段名
 * @param array $sortby 排序类型
 * asc正向排序 desc逆向排序 nat自然排序
 * @return array
 */
function list_sort_by($list,$field, $sortby='asc') {
  if(is_array($list)){
    $refer = $resultSet = array();
    foreach ($list as $i => $data)
      $refer[$i] = &$data[$field];
    switch ($sortby) {
      case 'asc': // 正向排序
        asort($refer);
        break;
      case 'desc':// 逆向排序
        arsort($refer);
        break;
      case 'nat': // 自然排序
        natcasesort($refer);
        break;
    }
    foreach ( $refer as $key=> $val)
      $resultSet[] = &$list[$key];
    return $resultSet;
  }
  return false;
}

/**
 * 在数据列表中搜索
 * @access public
 * @param array $list 数据列表
 * @param mixed $condition 查询条件
 * 支持 array('name'=>$value) 或者 name=$value
 * @return array
 */
function list_search($list,$condition) {
  if(is_string($condition))
    parse_str($condition,$condition);
  // 返回的结果集合
  $resultSet = array();
  foreach ($list as $key=>$data){
    $find  =  false;
    foreach ($condition as $field=>$value){
      if(isset($data[$field])) {
        if(0 === strpos($value,'/')) {
          $find  =  preg_match($value,$data[$field]);
        }elseif($data[$field]==$value){
          $find = true;
        }
      }
    }
    if($find)
      $resultSet[]   =  &$list[$key];
  }
  return $resultSet;
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
增加反向链接的101个方法 站长推荐
Jan 31 PHP
php 表单数据的获取代码
Mar 10 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 #PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 #PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 #PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 #PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 #PHP
phpQuery采集网页实现代码实例
Apr 02 #PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 #PHP
You might like
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
Python 文件管理实例详解
2015/11/10 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Sanic框架配置操作分析
2018/07/17 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
python psutil监控进程实例
2019/12/17 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
城建学院毕业生自荐信
2014/01/31 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
毕业论文致谢范文
2015/05/14 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
V Rising 服务器搭建图文教程
2022/06/16 Servers