树形数据操作

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;
    }
}

猜你喜欢

转载自www.cnblogs.com/2019PawN/p/11717433.html