foreach( $posts_array as $post ) {
            echo the_title();
    }

I think the problem is you call the_title() without [setup_postdata][1] first


If I were you, I'll simply use **$post->post_title**. 


    foreach( $posts_array as $post ) {
            echo $post->post_title;
    }

This is because you are "get_posts"ing within a loop, and setup_postdata will change global variable $post which is set with the current post's information while The Loop is running. 
 
  [1]: http://codex.wordpress.org/Function_Reference/setup_postdata