Foros del Web » Programando para Internet » PHP »

crear funcion dígitos por letras

Estas en el tema de crear funcion dígitos por letras en el foro de PHP en Foros del Web. como puedo crear una funcion para reemplazar dígitos por letras? para códigos por ejemplo. gracias Andrea...
  #1 (permalink)  
Antiguo 02/06/2003, 11:22
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
crear funcion dígitos por letras

como puedo crear una funcion para reemplazar dígitos por letras? para códigos por ejemplo.
gracias
Andrea
__________________
Saludos
  #2 (permalink)  
Antiguo 02/06/2003, 12:10
 
Fecha de Ingreso: febrero-2003
Ubicación: Viña del Mar
Mensajes: 85
Antigüedad: 14 años, 9 meses
Puntos: 2
str_replace?

http://www.php.net/manual/es/function.str-replace.php

^_^
__________________
http://www.zypper.cl/blues.gif
(web-hosting)

  #3 (permalink)  
Antiguo 02/06/2003, 12:23
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
no me expliqué bien, lo que yo busco es algo asi:
function cambiar($digito){
a=1;
b=2;
c=3;
d=4;
e=5;
f=6;
g=7;
h=8;
i=9;
j=0;
}, esa es la idea,
$dig=5;
$dig=cambiar($dig);
entonces:$dig=e
funcionara???
no, no funciona, pero eso es lo que busco.
cómo hago para que me interprete las letras como valores?
__________________
Saludos

Última edición por andreamod; 02/06/2003 a las 13:21
  #4 (permalink)  
Antiguo 02/06/2003, 14:44
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Podrias usar un array. Por ejemplo:
Código PHP:
function cambiar($digito) {
$array=array(=> 'j'=> 'a'asi con todos, );

return 
$array[$digito];
}

$dig=5;
$dig=cambiar($dig);
echo 
$dig
Eso si desea usar tus propios valores para las letras. Si quieres usar el codigo ASCII de la letra (o caracter) puedes usar la funcion chr() .

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 03/06/2003, 11:17
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
hola, esto es lo que esoty tratando de hacer, pero tampoco funciona, debería cierto?
Código PHP:
function cambiar($digito){
switch (
$digito){
case 
0:
$digito="k";
break;
case 
1:
$digito="u";
break;
case 
2:
$digito="d";
break;
case 
3:
$digito="t";
break;
case 
4:
$digito="c";
break;
case 
5:
$digito="v";
break;
case 
6:
$digito="s";
break;
case 
7:
$digito="a";
break;
case 
8:
$digito="o";
break;
case 
9:
$digito="n";
break;
}
return 
$digito;

pero no funciona , osea me devuelve lo mismo que ingresé.
__________________
Saludos

Última edición por andreamod; 03/06/2003 a las 11:23
  #6 (permalink)  
Antiguo 03/06/2003, 11:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usa la opción de josemi .. es un código mucho más limpio y facil de ampliar a futuro que ese monton de switch ...

De todas formas .. tu código Funciona .. pero habría que ver como pretendes usarlo ...:

Ejemplo de uso:
Código PHP:
echo cambiar(5); 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 03/06/2003, 11:33
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
el problema ahora es que el numero a ingresar tiene dos dígitos por eso me devolvía el mismo número que ingresaba)como puedo hacerlo en ese caso?, agradecería me pudieras ayudar, de antemano gracias.
__________________
Saludos

Última edición por andreamod; 03/06/2003 a las 11:36
  #8 (permalink)  
Antiguo 03/06/2003, 11:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Será mejor que pongas el algorítmo que estas intentando implementear en PHP .. Con ejemplos de uso tipo "peritas y manzas" .. para ver como implementarlo en PHP ..

Un saludo,

pd: Recuerda .. APORTA datos sobre tus problemas .. cuantos má detalles des mejor serán las respuestas.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 03/06/2003, 12:38
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
esto esta funcionando pero esta un poco bruto
Código PHP:
<?php
function cambiar($digito){
$dig1=substr("$digito",1,1);
$dig2=substr("$digito",2,1);
switch (
$dig1){
case 
0:
$dig1="k";
break;
case 
1:
$dig1="u";
break;
case 
2:
$dig1="d";
break;
case 
3:
$dig1="t";
break;
case 
4:
$dig1="c";
break;
case 
5:
$dig1="v";
break;
case 
6:
$dig1="s";
break;
case 
7:
$dig1="a";
break;
case 
8:
$dig1="o";
break;
case 
9:
$dig1="n";
break;
}
switch (
$dig2){
case 
0:
$dig2="k";
break;
case 
1:
$dig2="u";
break;
case 
2:
$dig2="d";
break;
case 
3:
$dig2="t";
break;
case 
4:
$dig2="c";
break;
case 
5:
$dig2="v";
break;
case 
6:
$dig2="s";
break;
case 
7:
$dig2="a";
break;
case 
8:
$dig2="o";
break;
case 
9:
$dig2="n";
break;
}
$letras=$dig1.$dig2;
return 
$letras;
}
__________________
Saludos

Última edición por andreamod; 03/06/2003 a las 12:40
  #10 (permalink)  
Antiguo 03/06/2003, 12:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. si, "bruto" es xD .. Usando arrays como te puso el ejemplo josemi en 4 líneas aprox tendrías tu código listo .. Ademas que si te dá por ampliar los digitos esos o cambiar rápidamente el "algorítmo" lo harías rápido ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 03/06/2003, 13:09
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
El problema es que lo de Josemi no me funciona.
me puedes dar un ejemplo aplicado a esta ultima función(la bruta) que posteé.
gracias de nuevo
Andrea
__________________
Saludos
  #12 (permalink)  
Antiguo 03/06/2003, 15:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero cómo que no te funciona? .. Conoces como trabajar con arrays asociativas? ..

Bueno .. lo que es tu código no funciona correctamente .. esos substr() no obtienen el caracter 1 y el 2 de un digito tipo "32" .. (las cadenas comienzan en indice 0 .. asi que sería 0 y 1 respectivamente y no 1 y 2 como lo haces ..)

Lo de usar arrays es simplemente esto:

Código PHP:
<?
function micambiar($digitos){

// definimos el array de intercambio ..
$array_intercambio=array(0=>'k','u','d','t','c','v','s','a','o','n');

// convierto el posíble entero o cadena de caracteres en un string (cadena)
// Esto es simplemente para aceptar "mixer var" (cualquier típo de variable) en esta función.
$digitos=strval($digitos); 
// accedo a los elementos (caracteres) de esa cadena directamente.
$dig1=$digitos{0}; 
$dig2=$digitos{1};

// devolvemos el valor de tus "digitos" usandolos como indices del array de intercambio.
return $array_intercambio[$dig1].$array_intercambio[$dig2];

}

//Puedes usar:
echo micambiar(12);
//ó
echo micambiar("12");
?>
Como veras .. sólo es usar indices de arrays y saber como php interpreta un "string" ..


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 03/06/2003, 16:09
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
cada dia se aprende , gracias por tu tiempo,
espero no molestar por un rato
gracias
Andrea
__________________
Saludos
  #14 (permalink)  
Antiguo 03/06/2003, 16:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Bueno, es que mi codigo es para cuando le pasas un digito, como ponias en tu primer post. Ahora lo que quieres es transformar un numero (cadena de digitos) en sus correspondientes caracteres. La opcion de Cluster es buena pero limitada a 2 digitos. Como prefiero las generalizaciones, aui va mi opcion:
Código PHP:
// cambiar es la misma fucion que en mi primer post
function cambiar($digito) {
$array=array(=> 'j'=> 'a'asi con todos, );

return 
$array[$digito];
}

// esta es la version general. Usa la funcion anterior

function cambiarNumero($numero) {

$numero=strval($numero);
$traduccion='';
for (
$i=0;$i<strlen($numero);$i++) {
  
$traduccion=$traduccion cambiar($numero{$i});
}

return 
$traduccion;
}

echo 
cambiarNumero(123); 
Creo que es bastante auto explicativa. Es simplemente pasarle a la primera funcion (que ya sabias que funcionaba) cada uno de los digitos y almacenar el valor que devolvia. Si tienes dudas con alguna funcion, mira en el manual.

Suerte.

PD: Esta dudando entre poner esta version (iterativa) o poner la version recursiva. Teniendo en cuenta que la explicacion de la recursiva iba a ser mucho mas recursiva, he optado por esta opcion.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #15 (permalink)  
Antiguo 03/06/2003, 16:14
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
gracias Josemi , sigo aprendiendo.
Andrea
__________________
Saludos
  #16 (permalink)  
Antiguo 04/06/2003, 01:07
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Aqui va mi aporte:
Código PHP:
$cadena "0a12f34g567j89";
$cadenasn str_replace(range(0,9), range("a","j"), $cadena);
echo 
"$cadena\n$cadenasn "
o
Código PHP:
$cadena "0a12f34g567j89";
$cadenasn strtr($cadenasn "0123456789""abcdefghij");
echo 
"$cadena\n$cadenasn "
  #17 (permalink)  
Antiguo 04/06/2003, 03:30
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Buena solucion, fran86. Pero como buen programador debo defender mi solucion. Con la mia puedes sustituir un digito por una cadena. Por eso podria considerarse mas general. La tuya es mas optima en las condiciones expuestas. Si cambian los requisitos, tendrias que cambiar a una funcion estilo la mia u otro caso particular. Eso ya es cuestion de gustos. A veces los requisitos cambian de un dia para otro. Otras veces nunca cambian. Y otras veces eres incapaz de saber si van a cambiar y en la forma que van a cambiar, con lo cual, ¿por que preocuparte del cambio antes de que se produzca?

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #18 (permalink)  
Antiguo 04/06/2003, 11:39
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Ok, josemi, tantos cambios me hacen pensar que estoy viejo, jejeje.
En serio, entiendo tu punto, y creo que se pude hacer algo con un poquito de ambos codiguitos usando strtr() con 2 parametros y tu array.
Lindo para que andreamod experimente...
http://ar.php.net/manual/en/function.strtr.php

Saludos.
  #19 (permalink)  
Antiguo 04/06/2003, 18:03
 
Fecha de Ingreso: mayo-2003
Mensajes: 119
Antigüedad: 14 años, 7 meses
Puntos: 0
acá sigo estudiando sus codigos, estoy alucinando con esto de los arrays y la forma de usarlos y recorrelrlos.
gracias de nuevo
__________________
Saludos
  #20 (permalink)  
Antiguo 04/06/2003, 18:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo de los arrays es simplemente "arrasys asociativos" .. (po si quieres buscar información al respecto) ..

Alucina mejor con PHP xDD y funciones como strtr() como bien usa fran86 en su ejemplo .. jeje.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:20.