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的错误信息
Oct 09 PHP
php中$this->含义分析
Nov 29 PHP
php file_get_contents函数轻松采集html数据
Apr 22 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
php 中奖概率算法实现代码
Jan 25 PHP
CodeIgniter整合Smarty的方法详解
Aug 25 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 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
zend framework文件上传功能实例代码
2013/12/25 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
numpy基础教程之np.linalg
2019/02/12 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
python3 实现调用串口功能
2019/12/26 Python
pycharm快捷键汇总
2020/02/14 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
经贸日语专业个人求职信范文
2014/04/29 职场文书
班级读书活动总结
2014/06/30 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
代办社保委托书范文
2014/10/06 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
安全员岗位职责范本
2015/04/11 职场文书
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技