zoukankan      html  css  js  c++  java
  • 数据库取值 三级分类后台遍历

    
    
    /**
    * 将从数据库读取的标签一维数组转成标签树形式
    * 根据每个值的parent_id, 将其变为相应值的叶子
    * @params array $tagList 从数据库读取的一维数组, 数组每个值包含idparent_id
    * int $root树根节点的父id string $id 默认为id列名 string $pid 默认为parent_id列名 string $child分支点的索引
    * @return array $tree 多维数组的标签树
    * */
    static function getDictionaryTree($tagList, $root = 0, $id = 'id', $pid = 'parentid', $child = 'child'){
    $tagTree = array(); //
    if(is_array($tagList)){
    $array = array();
    foreach ($tagList as $key => $item){
    $array[$item[$id]] = &$tagList[$key];//将数组中每个元素在内存中的地址提取出来
    }

    foreach($tagList as $key=>$item){
    $parentId = $item[$pid];
    if($root == $parentId){
    $tagTree[] = &$tagList[$key];
    }else{
    if(isset($array[$parentId])){
    $parent = &$array[$parentId];//直接找到父ID在内存中的地址, 然后添加子节点
    $parent['node'] = true;//nodetrue表示其下有子节点, 方便前台显示此项可展开
    $parent[$child][] = &$tagList[$key];
    }
    }
    }
    }
    return $tagTree;
    }

    /**
    * 多维数组转一维数组, 用于删除标签时, 删除父标签, 所有的子标签ID全部获取
    * @params array $tree 从数据库读取的信息 bool $getTagName 是否返回标签名, 为false只返回标签ID
    * bool $getGroupTag 是否返回子组标签(仅在返回标签名的时候生效) array $ret 递规调用的初始值
    * @return array $ret 返回的id列表, 或id=>array('tagName'=>name, 'tagType'=>val)的数组列表, tatType 0 为普通tag 1为组tag * */

    static function array_multi_to_single($tree, $getTagName = false, $getGroupTag = true, $ret = array())
    {
      foreach($tree as $k => $v){
        if(!empty($v['child'])){
          $ret = self::array_multi_to_single($v['child'], $getTagName, $getGroupTag, $ret);
       }
       if($getTagName){
       if(isset($v['child'])){
       if($getGroupTag){
       $ret[$v['id']] = $v['name'];
        }
          }else{
       $ret[$v['id']] = $v['name'];
       }
         }else{
          array_push($ret, $v['id']);
       }
    }
    return
    $ret;}
    
    
  • 相关阅读:
    使用crontab定时执行脚本时别忘了输出重定向>
    php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的
    单词number 和 numeral 的区别
    vim 调到闭合的{
    [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
    js中有包装类,java中也有包装类
    cin中函数的作用
    string类小结
    结构、位域、联合、枚举之小小总结
    运算符重载(C++)
  • 原文地址:https://www.cnblogs.com/ahugege/p/5945163.html
Copyright © 2011-2022 走看看