/** * 将从数据库读取的标签一维数组转成标签树形式 * 根据每个值的parent_id, 将其变为相应值的叶子 * @params array $tagList 从数据库读取的一维数组, 数组每个值包含id和parent_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;//node为true表示其下有子节点, 方便前台显示此项可展开 $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;}
时间: 2024-10-03 21:54:17