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 动态执行带有参数的类方法
Apr 10 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
php使用GeoIP库实例
Jun 27 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
CodeIgniter视图使用注意事项
Jan 20 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 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脚本数据库功能详解(下)
2006/10/09 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP解析RSS的方法
2015/03/05 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
JS继承 笔记
2011/07/13 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
在Python中定义和使用抽象类的方法
2016/06/30 Python
Python上下文管理器和with块详解
2017/09/09 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
大学生的应聘自我评价
2013/12/13 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
领导干部培训感言
2014/01/23 职场文书
代理班主任的自我评价
2014/02/04 职场文书
法人授权委托书范本
2014/04/04 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
《迟到》教学反思
2016/02/24 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
pycharm代码删除恢复的方法
2021/06/26 Python