class Tree
{
/**
* 数据递归
* @param $data
* @param int $id
* @param int $level
* @param array
* @return array
* @date 2018.10.24 15:40:34
*/
public static function recursion($data, $id = 0, $level = 1)
{
$return = [];
foreach ($data as $val) {
if ($val['pid'] == $id) {
$val['level'] = $level;
$return[] = $val;
$return = array_merge($return, static::recursion($data, $val['id'], $level + 1));
}
}
return $return;
}
/**
* 子节点的上级节点
* @param array $data
* @param int $pid
* @param array $result 临时结果
* @return array
* @date 2018.10.24 15:45:44
*/
public static function family($data, $pid, $result = [])
{
foreach ($data as $val) {
if ($val['id'] == $pid) {
$result[] = $val;
return static::family($data, $val['pid'], $result);
}
}
return $result;
}
/**
* 查询分类的子类
* @param array $data
* @param int $id
* @return array
* @date 2018.10.24 16:44:18
*/
public static function findSon($data, $id = 0)
{
$sons = [];
foreach ($data as $val) {
if ($val['pid'] == $id) {
$sons[] = $val;
}
}
return $sons;
}
/**
* 家谱树
* @param $data
* @param $id
* @return array
* @date 2018.10.24 16:18:38
*/
public static function familyTree($data, $id = 0)
{
$data = static::recursion($data, $id);
return static::subtrees($data);
}
/**
* 无限级嵌套树
* @param $data
* @param int $level
* @param int $id
* @return array
* @date 2018.10.25 10:59:16
*/
public static function subtrees($data, $level = 1, $id = 0)
{
$ret = [];
foreach ($data as $key => $val) {
if ($val['level']==$level && $val['pid']==$id) {
$data[$key]['children'] = static::subtrees($data, $level+1, $val['id']);
if (empty($data[$key]['children'])) {
unset($data[$key]['children']);
}
$ret[] = $data[$key];
}
}
return $ret;
}
}