Ver Mensaje Individual
  #23 (permalink)  
Antiguo 26/08/2013, 16:26
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: str_replace cadena exacta PROBLEMA TONTO....

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 original
  1. function funciontraducirPaises($a)
  2. {
  3.     // en este punto $a valor "ES", y el siguiente reemplaza todo lo que dice "ES" por "ESPAÑA"
  4.     $a=str_replace("ES","ESPAÑA",$a);
  5.     // en este punto $a valor "ESPAÑA", y el siguiente reemplaza todo lo que dice "P" por "PORTUGAL"
  6.     // por lo que la "P" de "ESPAÑA" es reemplazada por "PORTUGAL",
  7.     // porque str_replace() busca caracteres dentro de toda la cadena.
  8.     $a=str_replace("P","PORTUGAL",$a);
  9.     // en este punto $a valor "ESPORTUGALAÑA", y el siguiente reemplaza todo lo que dice "TU" por "TUNEZ"
  10.     // por lo que las letras "TU" son reemplazadas por "TUNEZ",
  11.     $a=str_replace("TU","TUNEZ",$a);
  12.     // valor final: "ESPORTUNEZGALAÑA"
  13. }
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 original
  1. function funcpais($codpais)
  2. {
  3.     switch ($codpais) {
  4.         case "AL":
  5.             return "ALEMANIA";
  6.         case "AND":
  7.             return "ANDORRA";
  8.         case "ANG":
  9.             return "ANGOLA";
  10.         case "ARA":
  11.             return  "ARABIA";
  12.         }
  13.     return "error";
  14. }
  15.  
  16. echo funcpais($variableSiglasPais);

Ya que no existe ninguna necesidad de reemplazar nada. Simplemente necesitas el valor que devolverá.

¿Se entiende el razonamiento del asunto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)