Turn get_posts as string into an array for use in theme admin options

This…

array('54'=>'Post #1','23'=>'Post #2', '654'=>'Post #3',)

… is not a string. It is an array definition.

All you need to do is create an array, which is what you want, and skip the string completely.

function post_page_options(){
    $post_page_options = get_posts('category=orderby=title&order=asc&numberposts=");
    foreach( $post_page_options as $value ) :
        $str[$value->ID] = $value->post_title;
    endforeach; 
    return $str;
}