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脚本的10个技巧(4)
Oct 09 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
php-fpm配置详解
Feb 12 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
PHP生成RSS文件类实例
Dec 05 PHP
Laravel5中contracts详解
Mar 02 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 PHP
php中的钩子理解及应用实例分析
Aug 30 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
基于empty函数的判断详解
2013/06/17 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python3中zip()函数使用详解
2018/06/29 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
params有什么用
2016/03/01 面试题
护理个人求职信范文
2014/01/08 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
超市督导岗位职责
2015/04/10 职场文书
离职证明范本
2015/06/12 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Python初学者必备的文件读写指南
2021/06/23 Python
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
Spring中bean集合注入的方法详解
2022/07/07 Java/Android
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis