Php 将第一个字发送到数组中的最后一个位置

Php 将第一个字发送到数组中的最后一个位置,php,arrays,Php,Arrays,我有一个以姓氏名称作为值的数组。我需要把它颠倒过来,得到名字和姓氏。我一直在研究php函数,但找不到有用的函数。谢谢大家! $name = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE'); 请尝试以下代码: $names = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE'); foreach ($names as &$full_name){ //Remember her

我有一个以姓氏名称作为值的数组。我需要把它颠倒过来,得到名字和姓氏。我一直在研究php函数,但找不到有用的函数。谢谢大家!

$name = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE');
请尝试以下代码:

$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) ;

正如Jan所指出的,字符串解析是一种方法(使用单个字符串并解析组成新字符串的部分),但通常需要注意的是,您需要对名称进行假设才能正确地完成此操作

如果保证只有
LAST-FIRST
条目,您就可以了

但是,例如,像这样的名字呢

HENRY VAN WINKLE
MADONNA
CATHERINE ZETA-JONES
ROBERT DOWNEY JR.
MR. T
有些情况很清楚,但其他情况则不清楚。

这应该是可行的:

$names = preg_replace('/^(\S+)\s+(\S+)$/', '\2 \1', $names);
编辑:是的,它可以工作


请注意,这只适用于由两部分组成的名称。如果它有两个以上的部分(例如中间名、后缀),它将保持原样。

并且列表中没有任何
威廉·亨利·盖茨三世
(或类似)吗?
$name = array('SMITH JOHN', 'BACON KEVIN', 'MERCURY FREDDIE');
array_walk(
    $name,
    function (&$value) {
        $value = implode(' ',array_reverse(explode(' ',$value)));
    }
);