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设计模式 Composite (组合模式)
Jun 26 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
PHP调用Webservice实例代码
Jul 29 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
php源码的使用方法讲解
Sep 26 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使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
用js重建星际争霸
2006/12/22 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
js 操作符汇总
2014/11/08 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
Python实现的简单算术游戏实例
2015/05/26 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
信访工作经验交流材料
2014/05/23 职场文书
新教师个人工作总结
2015/02/06 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
canvas 中如何实现物体的框选
2022/08/05 Javascript