Foros del Web » Programando para Internet » PHP »

Descomponer cadena

Estas en el tema de Descomponer cadena en el foro de PHP en Foros del Web. hola amigos tengo un millon de cadenas como la siguiente 004 +3097875 +0059625 +0016125 -k486 C+1907* y necesito descomponerlas asi: var1 = 004 var2 = ...
  #1 (permalink)  
Antiguo 26/11/2015, 14:19
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Descomponer cadena

hola amigos tengo un millon de cadenas como la siguiente 004 +3097875 +0059625 +0016125 -k486 C+1907* y necesito descomponerlas asi:

var1 = 004
var2 = 3097875
var3 = 0059625
var4 = 0016125
var5 = 486
var5 = 1907

en las var2,3,4 necesito quitar los ceros de la izquierda y los signos (+ -)
en var 5 necesito quierar los signos (+ -) y los caracteres antes del numero

Lo realice asi:

Código PHP:
Ver original
  1. $cadena = '004 +3097875 +0059625 +0016125 -k486 C+1907*';
  2.  
  3. $valores = str_replace(array("+","-",'C','*'),"",$raw_record);
  4.  
  5. list($var1,$var2,$var3,$var4,$var5,$var6) = explode(" ", $valores);
  6.  
  7.     echo $var1."<br>";
  8.     echo $var2."<br>";
  9.     echo (int) $var3."<br>";
  10.     echo (int) $var4."<br>";
  11.     echo preg_replace('/^\D+/', '', $var5 )."<br>";
  12.     echo $var6."<br>";

Puedo mejorarlo, que ideas tienen?
  #2 (permalink)  
Antiguo 26/11/2015, 15:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Descomponer cadena

Creo que hay varias formas de resolver esto. Una que se me ocurre consiste en eliminar a los símbolos de la cadena, separarla por los espacios y parsear los valores a entero, quedando así sin los ceros de la izquierda.

Código PHP:
Ver original
  1. $arr = array_map(function($num){
  2.     return intval($num);
  3. }, explode(' ', preg_replace('/[^\d\s]/', '', '004 +3097875 +0059625 +0016125 -k486 C+1907*')));
  4.  
  5. print_r($arr);

El resultado es el siguiente:
Código HTML:
Ver original
  1. Array
  2. (
  3.     [0] => 4
  4.     [1] => 3097875
  5.     [2] => 59625
  6.     [3] => 16125
  7.     [4] => 486
  8.     [5] => 1907
  9. )

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 26/11/2015, 15:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Descomponer cadena

Buena solución, sin embargo el callback hace uso de la identidad misma de "intval" así que se puede resumir así:
Código PHP:
Ver original
  1. $arr = array_map('intval', explode(' ', preg_replace('/[^\d\s]/', '', '004 +3097875 +0059625 +0016125 -k486 C+1907*')));
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 26/11/2015, 17:03
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Descomponer cadena

Cita:
Iniciado por pateketrueke Ver Mensaje
[...] el callback hace uso de la identidad misma de "intval" [...]
¡No lo recordaba!

Buena, Álvaro.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: cadena
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 10:24.