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;}
    
    
  • 相关阅读:
    Python 内存泄露 内存回收机制
    decimal 格式化
    iis 6 配置PHP
    按照 in (....) 里面的顺序进行排序
    设计模式之 访问者模式
    与数据库的列信息有关
    win32 IFolderView2::GetCurrentFolderFlags的使用
    MySQL防止重复插入相同记录 insert if not exists
    c++扩展Python(未验证)
    c++ 获取桌面图标的坐标与名称
  • 原文地址:https://www.cnblogs.com/ahugege/p/5945163.html
Copyright © 2011-2022 走看看