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 用sock技术发送邮件的函数
Jul 21 PHP
由php if 想到的些问题
Mar 22 PHP
php cookis创建实现代码
Mar 16 PHP
PHP5 面向对象(学习记录)
Dec 02 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
php中大括号作用介绍
Mar 22 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
19个超实用的PHP代码片段
Mar 14 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php版微信公众号接口实现发红包的方法
Oct 14 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&mysql(一)
2006/10/09 PHP
php实例分享之二维数组排序
2014/05/15 PHP
PHP中使用curl入门教程
2015/07/02 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
深入学习python的yield和generator
2016/03/10 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python中字符串的处理技巧分享
2016/09/17 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
建筑设计专业求职自我评价
2014/03/02 职场文书
党员十八大心得体会
2014/09/12 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书