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 相关文章推荐
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
PHP 远程关机实现代码
Nov 10 PHP
PHP文件上传原理简单分析
May 29 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
php连接mysql数据库
Mar 21 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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 一元分词算法
2009/11/30 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
设定php简写功能的方法
2019/11/28 PHP
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
python连接MySQL数据库实例分析
2015/05/12 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Flask数据库迁移简单介绍
2017/10/24 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python实现按长宽比缩放图片
2018/06/07 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
HTML的form表单和django的form表单
2019/07/25 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
PyTorch中的C++扩展实现
2020/04/02 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
大学生毕业求职自荐书范文
2014/02/04 职场文书
军训自我鉴定范文
2014/02/13 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
房地产广告策划方案
2014/05/15 职场文书
玄武湖导游词
2015/02/05 职场文书
学历证明样本
2015/06/16 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript