2

SURNAME NAME を値として持つ配列があります。それを逆にして、結果として NAME SURNAME を取得する必要があります。私はphp関数を見てきましたが、便利なものを見つけることができませんでした. ありがとうございました!

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

4 に答える 4

4

このコードを試してください:

$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) ;
于 2013-06-20T17:13:43.920 に答える
1

これはうまくいくはずです:

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

編集:はい、うまくいきます。

これは 2 部構成の名前に対してのみ機能することに注意してください。2 つ以上の部分 (例: ミドル ネーム、接尾辞) がある場合、そのまま残ります。

于 2013-06-20T17:18:43.947 に答える
1
$name = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE');
array_walk(
    $name,
    function (&$value) {
        $value = implode(' ',array_reverse(explode(' ',$value)));
    }
);
于 2013-06-20T17:19:14.713 に答える
0

Jan が指摘したように、文字列の解析が進むべき道です (個々の文字列を取得し、部分を解析して新しい文字列を作成します) が、これを正しく行うには名前について仮定を立てる必要があることに注意してください。

エントリのみが保証されている場合は、問題ありません。LAST FIRST

しかし、たとえば、次のような名前はどうでしょうか

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

明確なケースもあれば、そうでないケースもあります。

于 2013-06-20T17:18:18.690 に答える