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));
            }
        }, []);
    }
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));
            }
        }, []);
    }
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 ) ) ; } } , [ ] ) ; }
Flatten a multi-dimensional array into a single level

@param  array  $array
@param  int  $depth
@return array
Flatten a multi - dimensional array into a single level