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文本数据库的搜索方法
Oct 09 PHP
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
全面解析PHP面向对象的三大特征
Jun 10 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
PHP递归的三种常用方式
Feb 28 PHP
PHP开发实现快递查询功能详解
Apr 08 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php中final关键字用法分析
2016/12/07 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
js中style.display=""无效的解决方法
2014/10/30 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
django静态文件加载的方法
2018/05/20 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
python hook监听事件详解
2018/10/25 Python
详解python读取image
2019/04/03 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Keras自定义IOU方式
2020/06/10 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
关于读书的演讲稿800字
2014/08/27 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
师德师风事迹材料
2014/12/20 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
诚信教育主题班会
2015/08/13 职场文书
virtualenv隔离Python环境的问题解析
2022/06/21 Python