数据库取值 三级分类后台遍历


/**
* 将从数据库读取的标签一维数组转成标签树形式
* 根据每个值的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;}

原文地址:https://www.cnblogs.com/ahugege/p/5945163.html