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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
php多文件上传实现代码
Feb 20 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 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 mcrypt可逆加密算法分析
2011/07/19 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
Python的Django框架中的数据库配置指南
2015/07/17 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
python中tab键是什么意思
2020/06/18 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
应届生人事助理求职信
2013/11/09 职场文书
保安自我鉴定范文
2013/12/08 职场文书
银行批评与自我批评
2014/02/10 职场文书
大学生先进事迹材料
2014/02/16 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android