Foros del Web » Programando para Internet » PHP »

split no me divide por espacios

Estas en el tema de split no me divide por espacios en el foro de PHP en Foros del Web. Tengo este sencillo codigo y quiero separar el string $linea en diferentes palabras separando por espacios y no hay manera. En este mismo codigo si ...
  #1 (permalink)  
Antiguo 09/11/2004, 14:08
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 13 años, 1 mes
Puntos: 1
split no me divide por espacios

Tengo este sencillo codigo y quiero separar el string $linea en diferentes palabras separando por espacios y no hay manera. En este mismo codigo si en el split en vez de poner " " pones cualquier otro caracter lo separa a la perfeccion, pero con el espacio no se que pasa. He probado a poner "\s" y tampoco funciona. tanto $p[0] como $p[1] siempre salen en blanco :(
Que hago mal??
graciasss

<?php
exec ("ps -A",$resultado);
foreach ($resultado as $linea)
{
echo $linea."<br>";
$p=split(" ", $linea);
echo $p[0]."<br>";
echo $p[1]."<br>";
}
?>
  #2 (permalink)  
Antiguo 10/11/2004, 09:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
wakewakeup

En otro mensaje comentabas que no sabia que era "PHP-GTK" .. entonces, publica tus mensajes en el foro de PHP normal .. no aquí!!!.

Un saludo,
  #3 (permalink)  
Antiguo 11/11/2004, 02:11
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
¿No puede ser que en vez de espacios tengas &nbsp; ?
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #4 (permalink)  
Antiguo 11/11/2004, 03:21
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Pues haz un:

<php>
split("[:space:]", $str);
</php>
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 11/11/2004, 14:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 13 años, 1 mes
Puntos: 1
Seguro que no hay un &nbsp; lo he mirado por "ver codigo fuente" ademas es la salida de "ps -A" y eso no puede devolver html.
He probado a hacer split("[:space:]", $str); pero nada, me lo divide en vez de por espacios por :

Tambien he probado a hacer
$linea="hola caracola pepsicola";
$p=split(" ", $linea);

Y esto funciona a la perfeccion (me los sepra por espacios), así que debe ser que la salida de ps en vez de espacios normales pone otra cosa. Alguna idea?
Graciasss
  #6 (permalink)  
Antiguo 11/11/2004, 14:28
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
has probado con \t ?
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #7 (permalink)  
Antiguo 11/11/2004, 16:44
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
usa explode:

$linea="hola caracola pepsicola";
$p=explode(" ", $linea);
  #8 (permalink)  
Antiguo 11/11/2004, 16:53
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 13 años, 1 mes
Puntos: 1
Gracias a los dos pero nada de ninguna manera. He probado
$p=explode("[:space:]", $linea);
$p=split("[:space:]", $linea);
$p=explode("[\t]", $linea);
$p=split("[\t]", $linea);
$p=explode("\t", $linea);
$p=split("\t", $linea);
$p=explode("\s", $linea);
$p=split("\s", $linea);

Con el \s me separa la linea por la letra s. Puede ser por la version de php que tengo es la php4? yo ya estoy flipando...

Última edición por wakewakeup; 11/11/2004 a las 16:56
  #9 (permalink)  
Antiguo 11/11/2004, 17:30
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
probe el ejemplo y no funciona, por que? Sucede que muestra algo, pero muestra bien solo los PID mas altos, dado que los PID mas bajos tienen espacios antes, ejemplo:

----1
---10
--100
-1000
10000

Ves, entre el pid 1 y 1000 hay espacios (blancos, los simbolicé con un guion -) antes del numero, en cambio el 10000 no tiene espacios y por eso lo muestra, es decir cualquiera de los ejemplos que te dimos hace su trabajo bien, pero el dato viene mal y por tanto los escribe en otras posiciones, ejemplo: el 1 lo escribe en la posicion 4 del arreglo, el 10 en la 3, el 100 en la 2, etc.
Creo que vas a tener que meterte con expresiones regulares mas complejas que talvez te ayuden, desconozco ese tema, asi que ojala alguien lo maneje y te ayude.
  #10 (permalink)  
Antiguo 12/11/2004, 03:02
 
Fecha de Ingreso: noviembre-2004
Mensajes: 17
Antigüedad: 13 años
Puntos: 0
A mi me pasa lo mismo

A mi me esta pasando lo mismo, sabes ya como solucionarlo? Muchas gracias
  #11 (permalink)  
Antiguo 12/11/2004, 04:56
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
prueba así

$p=split(" ", trim($linea));
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #12 (permalink)  
Antiguo 12/11/2004, 08:13
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Si, eso funciona.
  #13 (permalink)  
Antiguo 12/11/2004, 08:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

El problema es que si tienes mas de un espacio seguido en medio de la cadena, el implode() te crea un elemento vacio. Por ejemplo, si haces:
Código PHP:
$p=explode(' ',"hola   holita  hola");
var_dump($p); 
te muestra

array(6) { [0]=> string(4) "hola" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(6) "holita" [4]=> string(0) "" [5]=> string(4) "hola" }

Es decir, 2 espacios seguidos los toma como espacio{vacio}espacio.

La solucion por expresiones regulares seria usar el modificador de "uno o mas caracteres". Si no me equivoco, para uno o mas espacios seguidos es [[:space:]]+
Código PHP:
$p=split('[[:space:]]+',"hola   holita  hola");
var_dump($p); 
muestra

array(3) { [0]=> string(4) "hola" [1]=> string(6) "holita" [2]=> string(4) "hola" }

Usar el trim ayuda eliminando los espacios del comienzo y del final, porque parece que los espacios iniciales y finales los toma como {vacio}espacio y espacio{vacio}, creando un elemento para {vacio}.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #14 (permalink)  
Antiguo 14/11/2004, 13:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 13 años, 1 mes
Puntos: 1
Graciasss por fin me funciona con el trim.
Gracias a todos los que han contestado, y en especial a claudio que fue el primero que dio con el problema ;)
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 11:28.