Autor Tema: Operar con cadenas (Strings) en PHP para extraer los apellidos de un nombre  (Leído 5502 veces)

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Hola, tengo un problema que no lo logro resolver utilizando las funciones substring de PHP para extraer de una cadena entera de apellidos, los apellidos individuales por separado, voy a copiar el código:

Este es el HTML

Código: [Seleccionar]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Prueba formulario PHP</title>
</head>

<body>

<h1>En éste formulario todos los campos son requeridos</h1>

<form action="formulario.php" method="post">

    <fieldset> <!--etiqueta para agrupar elementos de un formulario-->

<p> <!-- definir un parrafo-->
<label for="nombre">Nombre: </label>
<input type="text" name="nombre" id="nombre">
<br/> <br/>
<label for="apellidos">Apellidos: </label>
<input type="text" name="apellidos" id="apellidos">
<br/> <br/>
<label for="birthdate">Fecha de nacimiento: </label>
<input type="date" name="birthdate">
<br/> <br/>
<label for="email">Email: </label>
<input type="text" name="email" id="email">
<br/> <br/>
<input type="radio" name="sexo" id="varon" value="Varón">
<label for="varon">Varón: </label>
<br/> <br/>
<input type="radio" name="sexo" id="mujer" value="Mujer">
<label for="mujer">Mujer: </label>
<br/> <br/>
<input type="submit" value="Enviar">
<input type="reset">
</p>

</fieldset>

</form>

</body>
</html>


Y este es el PHP:

Código: [Seleccionar]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
</head>

<body>

<?php

$nombre $_REQUEST['nombre']; 

$apellidos $_REQUEST['apellidos']; 

$birthdate $_REQUEST['birthdate'];

$email $_REQUEST['email'];

$sexo $_REQUEST['sexo'];

$apellido1="";
$apellido2="";

function 
ExtraeApellido1 ($apellidos) { //funcion para extraer el primer apellido

for ($i 0$i $apellidos$i++) {
if ($apellidos[i]==" "){ //si tiene más de un 1 apellido voy a buscar el espacio
$apellido1 substr($apellidos0$i); //extraigo con substring desde la posicion 0 del string apellidos hasta el espacio el primer apellido
}
}
return $apellido1;
}

function 
ExtraeApellido2 ($apellidos) { //funcion para extraer el segundo apellido

for ($i 0$i $apellidos$i++) {
if ($apellidos[i]==" "){ //si tiene más de un 1 apellido voy a buscar el espacio
$apellido2 substr($apellidos, ($i+1)); //extraigo con substring desde la posicion del espacio +1 hasta el final el segundo apellido
}
}
return $apellido2;
}

function 
CalculaEdad$fecha ) { //funcion para calcular edad a partir de una fecha date tipo yyyy-mm-dd
    
list($Y,$m,$d) = explode("-",$fecha);
    return( 
date("md") < $m.$d date("Y")-$Y-date("Y")-$Y );
}

$apellido1 ExtraeApellido1($apellidos);
$apellido2 ExtraeApellido2($apellidos);
$edad CalculaEdad($birthdate);

echo 
"Tu nombre es " $nombre " y tu primer apellido es " $apellido1 " y tu segundo apellido " $apellido2 " y tienes " $edad " años."

?>



</body>
</html>

El error me da al retornar el valor de las variables $apellido1 y $apellido2, parece ser que no retorna nada
« Última modificación: 09 de Mayo 2017, 17:48 por Alex Rodríguez »

LoboBlanco

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re:Operar con cadenas (Strings) en PHP
« Respuesta #1 en: 15 de Febrero 2017, 18:24 »
Con apellidos tipo López Martín podrías usar strpos para encontrar la posición del espacio en blanco entre apellidos y luego substr para extraer directamente apellido1 y apellido2

Código: [Seleccionar]
<html>
<head>
<title>Extracion de apellidos</title>
</head>
<body>

<?php
//$apellidos="Gutierrez Ayala";
//$apellidos="Lopez Martin";
$apellidos="Goirigorreketechea Mentxakasubiroguea";
$posicion_espacio=strpos($apellidos" ");
$longitud=strlen($apellidos);
$apellido1=substr($apellidos,0,$posicion_espacio);
$apellido2=substr($apellidos,$posicion_espacio+1,$longitud-$posicion_espacio);
echo 
"Longitud de los apellidos : " $longitud "<br>";
echo 
"Posición del espacio : " $posicion_espacio "<br>";
echo 
"Apellido1 : #" $apellido1 "#<br>";
echo 
"Apellido2 : #" $apellido2 "#";

?>


</body>
</html>

[code]

El problema son los apellidos compuestos: Lopez de la Huerta Martin de la Fragua  ;D
« Última modificación: 15 de Febrero 2017, 18:31 por LoboBlanco »

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:Operar con cadenas (Strings) en PHP
« Respuesta #2 en: 15 de Febrero 2017, 22:22 »
Muchas gracias LoboBlanco, estoy deseando llegar a casa y probarlo, no conocía el método strpos. Con los apellidos compuestos me romperé la cabeza otro día, solo quería practicar las operaciones con cadenas.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Operar con cadenas (Strings) en PHP
« Respuesta #3 en: 15 de Febrero 2017, 23:20 »
Hola skatersezo.

Hay varias opciones para hacer esto, como te comentó LoboBlanco, pero primeramente deberías corregir tu código puesto que tienes algunos errores.

Para empezar, en esta línea:

Código: [Seleccionar]
for ($i = 0; $i < $apellidos; $i++) {
$apellidos contendrá un string, entonces tendrás que usar strlen($apellidos).
En la siguiente línea:

Código: [Seleccionar]
if ($apellidos[i]==" "){
Te faltaría el "$" en el índice de $apellidos.

También te podrías valer de la función "preg_split()", que usando una expresión regular te devuelve un array de strings:

Código: [Seleccionar]
$arrayApellidos = preg_split("/\s/", $apellidos);
O también de la función "explode()", que veo que usaste para otro fin también en tú código:

Código: [Seleccionar]
$arrayApellidos = explode(" ", $apellidos));
En cualquier caso, veo poco útil intentar saber cual es el primer apellido extrayéndolo de un string, porque ¿que pasa si el primer apellido es compuesto?
Pienso que sería mejor tener una caja de texto más en el formulario para que se introdujesen por separado los dos apellidos.

Saludos. ;D

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".