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

本文介绍了一种将从数据库读取的标签一维数组转换为标签树的方法,并提供了一个实用的PHP函数实现。此外,还提供了一个将多维数组转换为一维数组的函数,便于在删除标签时同时移除所有子标签。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值