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开发GUI
Oct 09 PHP
php cookie 登录验证示例代码
Mar 16 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
通过php动态传数据到highcharts
Apr 05 PHP
浅谈laravel aliases别名的原理
Oct 24 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
python中input()与raw_input()的区别分析
2016/02/27 Python
使用python实现个性化词云的方法
2017/06/16 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
python 自动重连wifi windows的方法
2018/12/18 Python
python实现电子书翻页小程序
2019/07/23 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
2013的个人自我评价
2013/12/26 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
努力学习演讲稿
2014/05/10 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
销售顾问工作计划书
2014/08/15 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
婚庆答谢词
2015/01/04 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书