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操作Access类(PHP+ODBC+Access)
Jan 02 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
PHP中16个高危函数整理
Sep 19 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
vue组件间通信解析
2017/03/01 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python计算N天之后日期的方法
2015/03/31 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python安装第三方库的3种方法
2015/06/21 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
领导干部考察材料
2014/02/08 职场文书
医德医风演讲稿
2014/05/20 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
执行力心得体会范文
2016/01/11 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android