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 相关文章推荐
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 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
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python基础教程之面向对象的一些概念
2014/08/29 Python
Python模拟用户登录验证
2017/09/11 Python
python删除服务器文件代码示例
2018/02/09 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
银行职员思想汇报
2013/12/31 职场文书
迎接领导欢迎词
2014/01/11 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
餐饮投资计划书
2014/04/25 职场文书
倡议书格式模板
2014/05/13 职场文书
医学生求职信
2014/07/01 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
审计班子对照检查材料
2014/08/27 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python