Separar cadena php

eXtreM3

Hola! Ma ha surgido una duda que de momento no sé cómo resolver.

Tengo una cadena dinámica con este formato

http://mediavida.com http://marca.com http://google.es

Cada vez puede devolver un número desconocido de urls, cómo puedo hacer para separar cada url en variables distintas? He probado con explode, con arrays, con foreach... y no me sale. Tendría que devolver algo asi:

$url1 = "http://mediavida.com";
$url2 = "http://marca.com";
$url3 = "http://google.es";

Gracias!

Edit: por si no se ve bien, lo que separa las urls de la cadena son espacios.

Lecherito

No sé mucho de php, pero es Split o Explode:

http://php.net/manual/en/function.explode.php

Esto es lo que he visto.

PD: Split creo que ya esta anticuado, de ahí el explode.

EDIT: He leido que no te sale, y a mi me ha salido perfectamente :S

RaymaN

$url = explode(' ', $cadena);

Luego en $url[numero] tienes cada url, es un array.

eXtreM3

Sí, a ver. Con explode funciona si pongo esto

$url[0] = tal;
$url[1] = cual;
$url[2] = pascual;

El rollo es que no sé cuántas separaciones hay, sé que empieza en 0 pero no sé cuando termina, y con un while no he sido capaz de recorrer el array $url[] :(

1 respuesta
suaveSHOW

Seguro que hay una forma menos ortodoxa, pero si tiene más de un espacio la separacion de las url, tras hacer:
$url = explode(' ', $cadena);

Te quedaran elementos del array vacio, por ejemplo:
$url[0] = tal;
$url[1] = '';
$url[2] = cual;
$url[3] = pascual;
$url[4] = '';

Con esta funcion:

function limpiarArray($array){
foreach($array as $id=> $valor) {
if(empty($valor)) unset($array[$id]);
}
return $array;
}

Al ejecutarla te eliminara los vacios.

1 respuesta
eXtreM3

#5 emmmm no, no devuelve valores vacíos. La explode te va cogiendo valores hasta el carácter que tú pongas ;)

RaymaN

#4 echo count($url);

1 respuesta
eXtreM3

#7 Grande! Esa es la clave ^^

$url = explode(" ", $cadena);
	
$num = count($url);

for($i = 0; $i<=$num; $i++)
{
	echo $v[$i].'<br>';
}

Gracias

1 respuesta
Has

#8 y porqué no usas un foreach que para eso están y ahorras líneas de código:

$url = explode(" ", $cadena);
		
foreach ($url as $valor) {
	
echo $valor . "<br />";
		
}
1 2 respuestas
eXtreM3

#9 te juro que ayer probé eso, de hecho está en #1 y no me funcionaba... lo he probado hoy y efectivamente sí funciona. Qué raro...

#11 sí, es lo más eficiente. Fue lo primero que probé ayer pero por alguna razón no me salía. Ya he cambiado el código al foreach ^^

1 respuesta
espadarrota

#10 hola, yo creo que la mejor solución es como bien dice #9 utilizando el bucle foreach ;)

saludos.

1 respuesta
eisenfaust

LOL foreach.

Es Perl, y no sé si me he quedado bien con la historia, pero fijo que PHP tiene algo parecido.

### foo : [Str] -> [Str]
sub foo { map { $_ =~ s/(.+)/\s$1<br>/ } split q{ }, @_ }

($var1, $var2, $var3) = foo @$str;
1 respuesta
Has

#12 de donde has sacado que neceista PERL porque el título del post dice claramente "Separar cadena php", y en donde está el "LOL" en usar el foreach, se creó justamente para recorrer arrays.

1 respuesta
eXtreM3

Qué demonios es eso?? El thread está resuelto, intenté foreach y no me salió no sé por qué, me dieron una solución alternativa con el count y un for, después se puso la sintaxis correcta del foreach (la que juraría utilicé por primera vez) y salió.

eisenfaust

#13 Por dos razones: PHP es (o era) básicamente un DSL de Perl. Y usar foreach para eso es un poco meh.

Pero no pasa nada, tranquilo que te llevas la galletita (:

Has

#13 espera que tenga motas de cocholate esa galletita :D

Usuarios habituales

  • Has
  • eisenfaust
  • eXtreM3
  • espadarrota
  • RaymaN
  • suaveSHOW
  • Lecherito