Capita di dover importare Cognome e Nome in colonne separate e riceverli in un unica stringa, tra nomi multipli e cognomi “spezzati” ci siamo procurati più di un mal di testa. Quindi la domanda che ci poniamo è:
Oggi può un computer distinguere in maniera infallibile un nome da un cognome? No.
Fatta questa premessa vi proponiamo la nostra soluzione al problema che si è rivelata estremamente efficace con nomi Italiani e spesso efficace anche con nomi stranieri. Purtroppo dobbiamo dare per scontato che in ordine siano stati inseriti prima il cognome e poi il nome (es “Rossi Carlo”, “Di Bianchi Mauro”, etc).
[php]
// $cognome_nome contiene il nome che dobbiamo dividere
$name_parts = explode(" ", $cognome_nome); // dividiamo la stringa in un array con ogni parola divisa da un altra tramite lo spazio
if (count($name_parts) == 2) // contiamo gli elementi dell’array se sono due la soluzione è facile il primo elemento è il cognome e il secondo il nome
{
$cognome = $name_parts[0];
$nome = $name_parts[1];
}else
{
// inizializzo questa variabile a 0, non è strettamente necessario farlo ma inizializzare non fa mai male.
// Uso questa variabile come indice perché se avrò più di un nome dovrò concatenarli tutti alla fine.
$starting_part = 0;
if (strlen($name_parts[0]) < 4) // se il primo elemento ha meno di 4 caratteri la consideriamo una particella da mettere prima del cognome
{
$cognome = $name_parts[0]." ".$name_parts[1];
$starting_part = 2;
}
else if ($name_parts[0][0] == "D" && strlen($name_parts[0]) < 6) // se il primo elemento ha meno di 6 caratteri e comincia con D la consideriamo una particella da mettere prima del cognome
{
$cognome = $name_parts[0]." ".$name_parts[1];
$starting_part = 2;
}
else // altrimenti vuol dire che c’è un cognome e tutti gli altri sono nomi
{
$cognome = $name_parts[0];
$starting_part = 1;
}
for ($i=$starting_part; $i < count($name_parts); $i++) //concateno tutti i nomi
{
$nome .= $name_parts[$i]." ";
}
$nome = trim($nome); // faccio il trim perché se ho più di un nome avrò sempre uno spazio in più a destra
}
[/php]
Leave A Comment