2017-04-05 75 views
0

我正在閱讀有一些名稱不一致的文本文件。比如我有這樣的名字:是否有更簡單的方法來修復名稱後綴?

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

正如你看到的,我可以通過姓氏和名字不過後綴放置不當分裂名。理想的名字應該是:

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

這就是說,這是我有,但我覺得我的過於複雜的事情簡單。有小費嗎?

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

我正在投票結束這個問題,因爲它屬於http://codereview.stackexchange.com/,因爲你在問如何改進它,而不是解決問題。 –

+1

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ <製作關於名字的假設是在不穩固的地面上行走> https://en.wikipedia.org/wiki/ Prince_(音樂家) – CD001

回答

1

因爲你不通過引用傳遞$firstname$lastname你必須在一分鐘的邏輯不應該工作。

這是說,你可以簡化你的代碼頗有幾分:

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; 
} 

希望這有助於!

+0

再次感謝羅斯。 – kratos

1

是例子總是這樣:

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

然後,你可以做

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

讀@ CD001評論:-)

相關問題