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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
获得Google PR值的PHP代码
Jan 28 PHP
PHP获取网站域名和地址的代码
Aug 17 PHP
一个php导出oracle库的php代码
Apr 20 PHP
php header示例代码(推荐)
Sep 08 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
PHP闭包函数详解
Feb 13 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
详解Laravel服务容器的优势
May 29 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的一些小问题
2010/07/03 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
详谈PHP编码转换问题
2015/07/28 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
提高网站信任度的技巧
2008/10/17 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
Python中线程编程之threading模块的使用详解
2015/06/23 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
毕业生学校推荐信范文
2014/05/21 职场文书
改革共识倡议书
2014/08/29 职场文书
团队会宣传标语
2014/10/09 职场文书
运动会报道稿大全
2015/07/23 职场文书
清明扫墓感想
2015/08/11 职场文书
小学生运动会广播
2015/08/19 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python