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 CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
Jun 06 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
php中adodbzip类实例
Dec 08 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
Apr 15 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python实现自动发送报警监控邮件
2018/06/21 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Python中的整除和取模实例
2020/06/03 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
《九寨沟》教学反思
2014/04/08 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
浅谈Web Storage API的使用
2021/06/23 Javascript
SQL写法--行行比较
2021/08/23 SQL Server