split variable

Iniciado por extreme69, 31 Mayo 2012, 02:04 AM

0 Miembros y 1 Visitante están viendo este tema.

extreme69

Tengo una variable "datos" con valor: "Luis Perez¡x¡20 años"

La tengo que separar en 2 variables:

$nombre = "Luis Perez"
$edad = "20 años"

Estuve viendo la función split aca: http://php.net/manual/es/function.split.php , pero cuando intento algo como:

<?php
$datos 
"Luis Perezixi20 años";
list(
$nombre$edad) = split('[¡x¡]'$datos);
echo 
$nombre
echo $edad
?>


Pero me está tomando cualquier caracter "¡" o "x" como separador, aparte de que me está mostrando cualquier cosa de resultado, simplemente está chupando las "i" y "x" del valor de la variable.

EDIT: Ahora también probé:

$datos = "Luis Perezix20 años";
$array = split('["ix", 2]', $datos);
echo $array[0];


Y me devuelve "Lu" XD, en $array[1] está sólo la "s" :( no entiendo.

EDIT2: Creo que le pegué, era con explode :P

$datos = "Luis Perezix20 años";
$array = explode("ix", $datos);
$nombre = $array[0];
$edad = $array[1];
echo $nombre;
echo $edad;


Corríjanme :P

#!drvy

Hola,

Efectivamente explode te sirve para ese nombre. Pero que pasa si el nombre es "Luix Perezix20 años" ?

Código (php) [Seleccionar]
<?php
$datos 
'Luix Perezix20 años';
list(
$nombre,$edad) = explode('ix',$datos);

echo 
$nombre.'<br />';
echo 
$edad;
?>


Devolvería: Lu Perez

Para eso lo mejor es un regex (expresión regular).
Un ejemplo de google.
Código (php) [Seleccionar]
$result = preg_split('/(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)/u', $subject);

Esto divide entre texto y numeros.
Devolvería: $nombre = Luix Perezix, $edad = 20 años.


Ejemplo final:
Código (php) [Seleccionar]
<?php
$datos 
'Luix Perezix20 años';

// Separamos el nombre de los años.
list($nombre,$edad) = preg_split('/(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)/u'$datos);
// Eleminamos los ultimos 2 caracteres (ix) del nombre.
$nombre substr($nombre,0,strlen($nombre)-2);

echo 
$nombre.'<br />';
echo 
$edad;
?>


Devolvería:
Luix Perez
20 años


Saludos

extreme69

Muchas gracias por la sugerencia, de todas formas el "ix" era un ejemplo", voy a usar algo como ¡!562&!&&¿? como separador, de esta manera sé que el error es casi imposible o al menos es 1 sólo.

Los casilleros no son de "nombre" y "edad", fue un ejemplo que puse, por lo que "edad" en realidad puede o no contener números al igual que nombre.