2013-06-20 2 views
2

값이 SURNAME NAME 인 배열이 있습니다. NAME SURNAME을 결과로 가져와 반전해야합니다. 나는 PHP 함수를 살펴 봤지만 유용한 것을 찾을 수 없었다. 고맙습니다!배열의 마지막 위치로 첫 단어 보내기

$names = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE'); 
foreach ($names as &$full_name){ //Remember here to pass by reference & 
    $parts = explode(" ", $full_name); 
    $full_name = "{$parts[1]} {$parts[0]}" ; 
} 

var_dump($names) ; 
+1

그리고 '윌리엄 헨리 게이츠 III'(또는 비슷한)이 목록에 없습니까? – mzedeler

답변

4

이 코드를 사용해보십시오 일반적으로이 작업을 올바르게 수행하려면 이름에 대한 가정을해야합니다.

LAST FIRST 개의 항목 만 보장되어 있다면 괜찮습니다.

HENRY VAN WINKLE 
MADONNA 
CATHERINE ZETA-JONES 
ROBERT DOWNEY JR. 
MR. T 

일부의 경우 같은

그러나 예를 들어

, 무엇에 대한 이름은 분명하지만, 다른 사람은 없습니다.

0

월이 지적한 바와 같이, 문자열 구문 분석 이동 (개별 문자열을 새로운 문자열을 구성하는 부품을 구문 분석)하지만 그냥 경고하는 방법은 다음과 같습니다

$name = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE'); 
1

이 작동합니다 :

$names = preg_replace('/^(\S+)\s+(\S+)$/', '\2 \1', $names); 

편집 : 네, 그것은 just fine 작동합니다.

두 부분으로 된 이름에만 적용됩니다. 두 개 이상의 부분 (예 : 중간 이름, 접미사)이있는 경우에는 그대로 두십시오.

1
$name = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE'); 
array_walk(
    $name, 
    function (&$value) { 
     $value = implode(' ',array_reverse(explode(' ',$value))); 
    } 
); 
관련 문제