Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Generar rango de números a partir de una cadena

Estas en el tema de Generar rango de números a partir de una cadena en el foro de PHP en Foros del Web. Buenas. Tengo una cadena con valores que el usuario puede introducir de diferentes formas, por ejemplo, puede introducir una lista de números: 2,4,6 O bien ...
  #1 (permalink)  
Antiguo 07/04/2016, 23:01
 
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Generar rango de números a partir de una cadena

Buenas. Tengo una cadena con valores que el usuario puede introducir de diferentes formas, por ejemplo, puede introducir una lista de números:

2,4,6

O bien puede introducir un rango:

9-14

lo que se debería imprimir como 9,10,11,12,13,14

Y también puede introducir una combinación de ambos:

2,4,6,9-14

en cuyo caso la salida debería ser 2,4,6,9,10,11,12,13,14

¿Hay alguna forma conveniente de conseguir esto directamente en la cadena, quizás usando expresiones regulares? ¿O debería convertir la cadena en array separando por comas y luego donde esté el guión buscar la forma de generar el rango?
Si alguien tiene alguna idea sería de gran ayuda.
Gracias!
  #2 (permalink)  
Antiguo 08/04/2016, 01:59
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Generar rango de números a partir de una cadena

Código PHP:
Ver original
  1. $cad='0-3,4,5,8-10,11,14-16';
  2. echo preg_replace_callback('/([0-9]*)-([0-9]*)/',
  3.         function($m)
  4.         {return implode(",",range($m[1],$m[2]));},$cad);
  #3 (permalink)  
Antiguo 08/04/2016, 04:15
 
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Generar rango de números a partir de una cadena

¡Gracias! ¡Me has salvado el día! Era mucho más sencillo de lo que me imaginaba.
Hay tanto que aprender... suerte de estos foros.

Saludos!

Etiquetas: cadena, rango
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 20:04.