list返回子孙树列表
1 /** 2 * * list返回子孙树 3 * @param array $list 原始列表 4 * @param int $parentId 父id 5 * @param int $level 几级子孙 6 * @param string $space 空格占位 7 * @date:2017.2.17 8 * @return array 9 */10 function treeList($list, $parentId = 0, $level = 0, $space = ' ')11 {12 static $bk = array();13 foreach ($list as $each)14 {15 if ($each['parent_id'] == $parentId)16 {17 $each['level'] = $level;18 $each['show'] = str_repeat($space, $level) . $each['name'];19 $bk[$each['id']] = $each;20 treeList($list, $each['id'], $level + 1, $space);//子孙紧跟在自己后面21 }22 }23 return $bk;24 }
list返回子孙树数组
1 /** 2 * * list返回子孙树 3 * @param array $list 原始列表 4 * @param int $parentId 父id 5 * @param int $level 几级子孙 6 * @param string $space 空格占位 7 * @date:2017.2.17 8 * @return array 9 */10 function treeArr($list, $parentId = 0, $level = 0, $space = ' ')11 {12 $bk = array();13 foreach ($list as $each)14 {15 if ($each['parent_id'] == $parentId)16 {17 $each['level'] = $level;18 $each['show'] = str_repeat($space, $level) . $each['name'];19 $each['sonArr'] = treeArr($list, $each['id'], $level + 1, $space);20 $bk[$each['id']] = $each;21 }22 }23 return $bk;24 }
如果只需要所有层级名称
/** * 获取所有层级名列表 * @date:2017.2.17 * @return array */function getFulNameList(){ $listRaw = getList(); $list = array(); //一些处理 foreach ($listRaw as $each) { $list[$each['id']] = iconvArray($each, 'GBK', 'UTF-8');//GBK->UTF-8 } //加所有层级名 foreach ($list as $id => $each) { $fulName = $list['name']; $parentId = $each['parent_id']; while ($parentId != 0 && $list[$parentId]['parent_id'] != 0) { $fulName = $list[$parentId]['name'].'_'.$fulName; $parentId = $list[$parentId]['parent_id']; } $list[$id]['fulName'] = $fulName; } return $list;}
//获取所有子孙
1 function getSpringId($selfId, $list) 2 { 3 $springIdArr = array(); 4 $parentIdArr = array($selfId => $selfId); 5 do 6 { 7 $newSonArr = array(); 8 foreach ($list as $each) 9 {10 if (isset($parentIdArr[$each['parent_id']]))11 {12 $springIdArr[$each['id']] = $each['id'];13 $newSonArr[$each['id']] = $each['id'];14 }15 }16 $parentIdArr = $newSonArr;//新一辈父17 } while (count($parentIdArr) > 0);18 19 return $springIdArr;20 }