The approach you mentioned will definitely work, but as you're finding, it may be a bit clunky.
Two possible alternatives: The first one is to use JavaScript. Leave the countries select list in pure HTML. Add a hidden form element which has the value of the user's country. Then have JavaScript execute on page load to match the hidden value with a value in the country select list. Disadvantage here is if the user has JavaScript disabled.
Second approach would be to store all the countries in a database and build the select list dynamically (much like what you're doing above, minus storing the countries in an array). The cool part about this is if you go this route, you can build a pretty cool multipurpose function that will work for most of your select box needs (and also possibly for radio and checkboxes too).
Here's some code I've built that does what I'm talking about:
function m_BuildList($query, $ID = '')
{
$list = '';
$cursor = mysql_query($query);
while($row = mysql_fetch_array($cursor))
{
$list .= '<option value="' . $row['ID'] . '"';
if(is_array($ID))
{
if(in_array($row['ID'], $ID))
$list .= ' SELECTED';
} // end if(is_array($ID))
else
if($row['ID'] == $ID)
$list .= ' SELECTED';
$list .= '>' . $row['NAME'] . "\n";
} // end while($row = mysql_fetch_object($result))
return $list;
} // end function BuildList($query, $ID = '')
Here's what is cool about it: you pass in any query you like. The only rules to the query is one field is to be called "NAME." This field will show up to the user. Then you have to have a 2nd field called "ID." This field will go into the value="" portion of the select list. Now, you mostlikely don't have table fields named NAME and ID. That's ok. You can do this: "SELECT MyFieldName AS NAME, MyIDField AS ID FROM MyTable" - this will work just fine. So you pass in the query, the 2nd parameter is the ID. You just provide which country the user has here and the code will automatically match it up. This snippet of code has ended up being pretty portable for me (it'll even handle multiple selections - just pass in an array for $ID).
I should also note, the above code assumes the select start and end tags are already in place. The code above only builds the drop down options. I use templating so this works out great for me.