2017-04-05 3 views
0

Ich lese eine Textdatei mit einigen Namensinkonsistenzen. Zum Beispiel habe ich Namen wie:Gibt es eine einfachere Möglichkeit, Suffixe in Namen zu korrigieren?

MILLER, WALTER MCNAB IV 
DUPONT, THOMAS B. II 
HARDEWAY, GRANT U. SR. 

Wie man sehen kann ich den Namen nach Vornamen und Nachnamen sind jedoch die Suffixe falsch platziert aufspalten. Im Idealfall sollten die Namen sein:

WALTER MCNAB MILLER IV 
THOMAS B. DUPONT II 
GRANT U. HARDEWAY SR. 

Dass dies gesagt ist, was ich habe, aber ich fühle Im über einfach etwas zu verkomplizieren. Irgendwelche Tipps?

private function extractFullName($name){ 


//I cant do V since V could be someone's middle initial also :(
     $suffix = collect(['II', 'III', 'IV', 'JR.', 'SR.']); 

     // lets first assemble a full name from the row 
     $fullNameArray = explode(",", $name); 
     $firstName=trim($fullNameArray[1]); 
     $lastName=trim($fullNameArray[0]); 

     //lets look at the FIRST NAME for II/III/IV/JR./SR. 

     $suffix = $suffix->each(function ($item, $key) use ($firstName, $lastName) { 

      if (strpos($firstName, " ".$item)){ 
       $firstName = preg_replace('/'.$item.'$/', '', $firstName); 
       $lastName.=' '.$item; 
       return false; 
      } 

     }); 


     //Basically arranging it in a 'firstname lastname II/III/IV/JR./SR.' format 
     $name = $firstName." ".$lastName); 
     $name = ucwords(strtolower($lawyerName)); 
     return $name; 
    } 
+0

Ich stimme für das Schließen dieser Frage als Off-Topic, weil es auf http://codereview.stackexchange.com/ gehört, da Sie fragen, wie es zu verbessern, nicht das Problem zu lösen. –

+1

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ https://en.wikipedia.org/wiki/ Prince_ (Musiker) – CD001

Antwort

1

Die Logik, die Sie in der Minute haben, sollten nicht, wie Sie den $firstname und $lastname durch Bezugnahme vorbei sind nicht arbeiten.

Dieses Wesen sagten, Sie ziemlich viel Code könnte vereinfachen:

private function extractFullName($name) 
{ 
    $suffix = collect(['II', 'III', 'IV', 'JR.', 'SR.'])->first(function ($suffix) use ($name) { 
     return ends_with($name, $suffix); 
    }); 

    $name = $suffix ? rtrim($name, $suffix) : $name; 

    return collect(explode(',', $name))->map(function ($name) { 
     return trim(ucwords(strtolower($name))); 
    })->reverse()->implode(' ') . ' ' . $suffix; 
} 

hoffe, das hilft!

+0

Danke nochmal Ross. – kratos

1

Sind die Beispiele immer so:

[surename], [name] [secondname]. [extra] ??

Dann können Sie

$arr = explode(" ", $name); 
$a=array_pop($arr); 
$b=trim(array_shift($arr),','); 
array_push($arr,$b); 
array_push($arr,$a); 
print implode(' ',$arr); 

lesen @ CD001 Kommentar tun :-)

Verwandte Themen