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;
}