Para el caso de cadenas (strings) .. y usando arrays como es tu caso .. Emplea mejor un blucle foreach para recorrer dicho array .. El cual no hace mas q extrar en cada pasada del bucle un elemento (correlativo) del array hasta su último elemento ..
Código PHP:
$sexo=$row["sexo"];
$sexo_nombres=Array("Masculino","Femenino");
echo "<select name=\"sexo\">\n";
foreach ($sexo_nombres as $sex){
if ($sexo==$sex){
echo "<option value=\"".$sexo."\" selected>".$sexo."\n";
}else{
echo "<option value=\"".$sexo."\">".$sexo."\n";
}
}
echo "</select>\n";
}
En tu caso .. no te funcinoba porque estabas comparando en el IF .. una cadena ($sexo .. ) con el $contador q es numero .. Deberias usar el elemento q corresponda a ese indice en el array ..
Código PHP:
$sexo=$row["sexo"];
$sexo_nombres=Array(1=>"Masculino","Femenino");
echo "<select name=\"sexo\">\n";
for ($contador=1; $contador <=2; $contador++){
if ($sexo==$sexo_nombres[$contador]){ // <--------
echo "<option value=\"".$contador."\" selected>".$sexo_nombres[$contador]."\n";
}else{
echo "<option value=\"".$contador."\">".$sexo_nombres[$contador]."\n";
}
}
echo "</select>\n";
}
Si necesitas que tu "value" de tus options sea "1" y "2" .. usa el 2º código (el tuyo con el detalle q te comenté ..). Si necesitas el "value" de tus options como "Masculino" y "Femenino" .. usa el primer código ...
Tambien asegurate que siempreee tus cadenas (strings) a comparar sean iguales .. Si una es "Femenino" y la otra es "femenino" (la del array por ejemplo y la otra la de tu campo de tu BD) siempre te dará el caso "else" del IF ..
Una solución a esto (si es q no sabes como puede llegar tu cadena de tu BD) es convertirlo a minusculas por ejemplo amabas cadenas (el array lo tienes en minusculas por defecto .. y tu $row['sexo'] .. lo pasas a minusculas via strtolower() ...)
Un saludo,