补充说明:
生成层级结构或者拼接结构时,使用静态变量的情况仅调用一次函数时推荐,避免数据叠加,如确实要使用静态变量形式,则需要每次一调用函数时清空一下数据,可参考:https://www.cnblogs.com/laijinquan/p/10197880.html
不使用静态变量生成层级结构,则需要递归合并数据:
/*---------------------层级结构---------------------*/
/**
* 递归获取所有子级(层级结构)
* @param array $array 所有分类数据
* @param int $pid 父级id
* @param int $level 层级
* @return mixed
*/
function getChildsLevel($array,$pid = 0,$level = 0){
$res = array();
foreach ($array as $key => $value){
//第一次找到根节点 也就是pid=0的节点
if($value['pid'] == $pid){
$value['level'] = $level;
$res[] = $value;
unset($array[$key]);/* 销毁节点,减少后续递归消耗 */
//递归查找父ID为该节点id的节点,层级则为原级别+1
$res = array_merge($res,getChildsLevel($array,$value['id'],$level+1));
}
}
return $res;
}
//***树形结构***/
/**
* 递归生成树形结构
* @param array $array 所有分类数据
* @param int $pid 父级id
* @return array
*/
function getTrees($array,$pid = 0){
$tree = array();
foreach ($array as $key => $value) {
if ($value['pid'] == $pid) {
unset($array[$key]);/* 销毁节点,减少后续递归消耗 */
$child = getTrees($array, $value['id']);
if (!empty($child)){
$value['child'] = $child;
}
$tree[] = $value;
}
}
return $tree;
}
//***层级结构***/
/**
* 递归生成层级结构
* @param array $array 所有分类数据
* @param int $pid 父级id
* @param int $level 层级
* @return mixed
*/
function getChilds($array,$pid = 0,$level = 0){
static $res;//声明静态数组,用于保存数据
foreach ($array as $key => $value){
//第一次找到根节点 也就是pid=0的节点
if($value['pid'] == $pid){
$value['level'] = $level;
$res[] = $value;
unset($array[$key]);/* 销毁节点,减少后续递归消耗 */
//递归查找父ID为该节点id的节点,层级则为原级别+1
getChilds($array,$value['id'],$level+1);
}
}
return $res;
}
/**
* (递归和引用)生成层级结