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 extract 将数组拆分成多个变量的函数
Jun 30 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
浅谈php中include文件变量作用域
Jun 18 PHP
详细解读PHP中接口的应用
Aug 12 PHP
PHP中的Session对象如何使用
Sep 25 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
PHP微信开发之有道翻译
Jun 23 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP命名空间简单用法示例
Dec 28 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 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学习资源和链接.
2006/12/05 PHP
php调用mysql存储过程
2007/02/14 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
PHP排序算法类实例
2015/06/17 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
js实现车辆管理系统
2020/08/26 Javascript
python 数据的清理行为实例详解
2017/07/12 Python
python机器学习库常用汇总
2017/11/15 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
小学五年级学生评语
2014/04/22 职场文书
搞笑车尾标语
2014/06/23 职场文书
爱护公共设施标语
2014/06/24 职场文书
写给老师的保证书
2015/05/09 职场文书
宣传委员竞选稿
2015/11/19 职场文书
创业计划之特色精品店
2019/08/12 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫