Foros del Web » Programando para Internet » PHP »

Sumar 1 a cada posición de un numero

Estas en el tema de Sumar 1 a cada posición de un numero en el foro de PHP en Foros del Web. Me gustaría saber como perder sumar uno a cada posición de un numero de 4 cifras. Ojo, no quiero sumar 1111 al numero que tengo, ...
  #1 (permalink)  
Antiguo 05/06/2016, 09:43
 
Fecha de Ingreso: julio-2011
Ubicación: Santa Amalia
Mensajes: 22
Antigüedad: 12 años, 8 meses
Puntos: 1
Sumar 1 a cada posición de un numero

Me gustaría saber como perder sumar uno a cada posición de un numero de 4 cifras. Ojo, no quiero sumar 1111 al numero que tengo, me gustaría sumar uno individualmente a cada numero olvidándome de su acarreo si lo llevase.

Es decir:
Numero inicial: $num=1397
Resultado esperado: 2408
  #2 (permalink)  
Antiguo 05/06/2016, 09:48
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Sumar 1 a cada posición de un numero

Lo que se me ocurre es que uses str_replace.

aquí está la documentación. Puedes usar un array para buscar, y otro array para reemplazar. Saludos :)
  #3 (permalink)  
Antiguo 05/06/2016, 10:22
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Sumar 1 a cada posición de un numero

puedes usar array_map http://www.w3schools.com/php/func_array_map.asp ve al ejemplo 3
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 06/06/2016, 08:28
 
Fecha de Ingreso: julio-2011
Ubicación: Santa Amalia
Mensajes: 22
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sumar 1 a cada posición de un numero

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Lo que se me ocurre es que uses str_replace.

[URL="http://php.net/manual/es/function.str-replace.php"]aquí[/URL] está la documentación. Puedes usar un array para buscar, y otro array para reemplazar. Saludos :)
Lo he intentado con str-replace pero siempre me da todo 1, ya que va cambiando un numero por otro hasta que al final todos los pone a 1.

Código:
$codificado = array("2", "3", "4", "5", "6", "7", "8", "9", "0", "1");
  $real   = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");

  $al = str_replace($real, $codificado, $al);
  #5 (permalink)  
Antiguo 06/06/2016, 08:49
 
Fecha de Ingreso: julio-2011
Ubicación: Santa Amalia
Mensajes: 22
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Sumar 1 a cada posición de un numero

Por si a alguien le vale algo similar, la solución que he conseguido es:

Código:
//Partimos de que $al es una cadena con un número de 4 dígitos
$al=str_pad($ae, 4, "0", STR_PAD_LEFT);

//Extraigo cada campo para poder sumarlo
$a=1 + $al[0];
$b=1 + $al[1];
$c=1 + $al[2];
$d=1+ $al[3];

//Trunco la suma por si me diera más de 9		
$al[0] = substr($a, -1);
$al[1] = substr($b, -1);
$al[2] = substr($c, -1);
$al[3] = substr($d, -1);
Si alguien lo hace de manera más optimizada estaría bien.
  #6 (permalink)  
Antiguo 06/06/2016, 09:34
Avatar de kip13  
Fecha de Ingreso: agosto-2011
Mensajes: 167
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Sumar 1 a cada posición de un numero

Hola, creo que usar array_map() como te indicaron resulta mucho mas facil, aqui te dejo algo a ver si te sirve:

Código PHP:
Ver original
  1. <?php
  2. function sumar_val($v)
  3. {
  4.     $suma = $v + 1;
  5.     return $suma;
  6. }
  7.  
  8. $num ='12349';
  9. echo 'Valor inicial '.$num;
  10. for ($i=0;$i<strlen($num);$i++){
  11.     $array_num[$i] = $num[$i];
  12. }
  13.  
  14. $resultado=(array_map("sumar_val",$array_num));
  15.  
  16. echo 'Resultado '.implode('',$resultado);
  17. ?>

Ahora bien, si en el valor que va usarse para la operacion contiene un 9, pues lógicamente al sumarse 1 seria 10, no entiendo si eso es problema, pero de todas formas he hecho una solucion basandome en tu ejemplo, aqui esta:

Código PHP:
Ver original
  1. <?php
  2. function sumar_val($v)
  3. {
  4.     $suma = $v + 1;
  5.     return $suma;
  6. }
  7.  
  8. $num ='1397';
  9. echo 'Valor inicial '.$num;
  10.  
  11. for ($i=0;$i<strlen($num);$i++){
  12.     ($num[$i] == 9) ? $array_num[$i] = -1 : $array_num[$i] = $num[$i];
  13. }
  14.  
  15. $resultado=(array_map("sumar_val",$array_num));
  16. echo 'Resultado esperado '.implode('',$resultado);
  17. ?>

Pruebalo y nos cuentas.

Saludos

Última edición por kip13; 06/06/2016 a las 09:42
  #7 (permalink)  
Antiguo 06/06/2016, 09:51
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Sumar 1 a cada posición de un numero

Es muy sencillo lo que quieres hacer, note que en la suma solo tomas el dígito de las unidades cuando la suma es mayor a 9, así que puedes hacer algo como esto.
Código PHP:
Ver original
  1. //separamos la cadena
  2. $digits = str_split('1397');
  3. //realizamos suma
  4. $sum = array_map(function($value){
  5.     ++$value;
  6.     return ($value > 9) ? 0: $value;
  7. }, $digits);
  8. //creamos cadena nuevamente
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: cada, numero
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 05:17.