implment array_flatten