Hola Fleon
Trataré de explicar cómo lo haría yo:
Suponiendo que ya tengo guardado el ID que debe aparecer como seleccionado en una variable llamada
$id_sel.
Ahora mientras vamos cargando la lista dentro del ciclo
for debemos preguntar si el ID del elemento actual es el que tengo almacenado en la variable
$id_sel. Si es así, simplemente añadimos la cláusula
SELECTED en la etiqueta OPTION, si el elemento actual no es el que deseamos que se muestre seleccionado, entonces no colocamos la etiqueta SELECTED y en su lugar dejamos el espacio en blanco.
Algo de código como ejemplo:
$lista = array(1=> 'perro', 4=> 'gato', 3=> 'paloma');
echo '<SELECT>';
$id_sel=4; // Seleccionamos como ejemplo el ID=4 para gato
foreach ($lista as $valor => $elemento){
$sel=($id_sel==$valor?' SELECTED=selected ':' '); // Ojo en esta línea
echo '<OPTION value='.$valor.$sel.'>'.$elemento.'</OPTION>';
}
echo '</SELECT>'
Estoy utilizando un operador especial para comparar valores en una sola línea
$sel=($id_sel==$valor?' SELECTED=selected ':' ');
//La línea anterior es equivalente con lo siguiente
if ($id_sel==$valor)
$sel=' SELECTED=selected ';
else
$sel=' ';
Es decir solamente se agrega el atributo SELECTED cuando encontramos el id buscado, en caso contrario dejamos el espacio en blanco.
Saludos