2017-04-05 59 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评论:-)

相关问题