public static function flatten(array $array, $depth = INF) : array
    {
        $depth = is_int($depth) ? max($depth, 0) : INF;

        return array_reduce($array, function ($result, $item) use ($depth) {
            if (!is_array($item) || $depth === 0) {
                return array_merge($result, [$item]);
            } elseif ($depth === 1) {
                return array_merge($result, array_values($item));
            } else {
                return array_merge($result, self::flatten($item, $depth - 1));
            }
        }, []);
    }