Pues como ya te dijimos, hay menos tres posibilidades, y ninguna necesita de un str_replace()...
1) La tabla. Dices que se va a eliminar, cosa que no tiene mucho sentido si vas a seguir usando códigos de país. Nadie elimina ese tipo de tablas. Como mucho las reemplaza por otras más funcionales.
2) Hardcodear todo en la función (supongo que sabes a qué refiero con "hardcoding"), que implicaría listar en la función a todos los países.
3) Usar un archivo externo, por ejemplo XML, donde almacenes la tabla de datos y la leas por PHP.
Lo que aparentemente se te está escapando es por qué te falla la lógica de lo que tienes escrito en esa función, y no estás viendo por qué
debes usar o
switch o
case. Pero al menos uno de ambos es necesario para lo que quieres.
Veamos:
Supongamos que ingresas "ES", como en tu primer ejemplo.
Código PHP:
Ver originalfunction funciontraducirPaises($a)
{
// en este punto $a valor "ES", y el siguiente reemplaza todo lo que dice "ES" por "ESPAÑA"
// en este punto $a valor "ESPAÑA", y el siguiente reemplaza todo lo que dice "P" por "PORTUGAL"
// por lo que la "P" de "ESPAÑA" es reemplazada por "PORTUGAL",
// porque str_replace() busca caracteres dentro de toda la cadena.
// en este punto $a valor "ESPORTUGALAÑA", y el siguiente reemplaza todo lo que dice "TU" por "TUNEZ"
// por lo que las letras "TU" son reemplazadas por "TUNEZ",
// valor final: "ESPORTUNEZGALAÑA"
}
El problema que no has solucionado es que debes salir de la función en cuanto se haya hecho el primer reemplazo. Pero como no lo haces, se sigue ejecutando.
En otras palabras, no tienes sentencia de corte de procesamiento. Por eso falla completamente.
¿Se entiende?
De allí que la solución sea o un switch o un case (o incluso una secuencia de varios if, uno detrás de otro). Así como te lo puse al principio.
Pero por otro lado, ten en cuenta que siendo que una función devuelve siempre un valor, y que no debe (por definición) devolver valores en sus parámetros, que siempre son sólo entrada, lo más lógico sería:
Código PHP:
Ver originalfunction funcpais($codpais)
{
switch ($codpais) {
case "AL":
return "ALEMANIA";
case "AND":
return "ANDORRA";
case "ANG":
return "ANGOLA";
case "ARA":
return "ARABIA";
}
return "error";
}
echo funcpais($variableSiglasPais);
Ya que no existe ninguna necesidad de reemplazar nada. Simplemente necesitas el valor que devolverá.
¿Se entiende el razonamiento del asunto?