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
Hola,
Efectivamente explode te sirve para ese nombre. Pero que pasa si el nombre es "Luix Perezix20 años" ?
<?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.
$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:
<?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
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.