反转数组php中的名字和姓氏

时间:2019-02-07 19:11:55

标签: php

我正在学习php,并且正在尝试执行此练习,我需要反转数组中的名字和姓氏。

$names = ["barira, stefan",
          "cikka, maria",
          "luppo, martin ",
          "bill, sebastian"];

输出必须是这样的:

Array ( [0] => stefan, barira 
        [1] => maria, cikka 
        [2] => martin, luppo  
        [3] => sebastian, bill ) 

我尝试了这段代码,它确实可以完成工作,但是我希望它像上面的输出一样:

<?php
   $names = ["barira, stefan",
          "cikka, maria",
          "luppo, martin ",
          "bill, sebastian"];



for($i=0; $i<count($names); $i++) {
          $words = $names[$i];
        $string = explode(' ', $words);
         $string = array_reverse($string);
      $reverse = implode( ' ',$string);
        print_r( $reverse);
         } 

2 个答案:

答案 0 :(得分:1)

这就是我要做的

$names = ["barira, stefan",
      "cikka, maria",
      "luppo, martin ",
      "bill, sebastian"];

//note the & pass by reference, this way we don't even need a new array
foreach($names as &$name)
  $name= implode(' ', array_reverse(array_filter(array_map('trim', explode(',', $name)))));

print_r($names);

输出

Array
(
    [0] => stefan barira
    [1] => maria cikka
    [2] => martin luppo
    [3] => sebastian bill
)

Sandbox

我可以解释这些函数的作用……

如果您绝对希望将,放回原处,我认为这是个坏主意,则可以更改此内容:

 $name = implode(', ', ...... );
  

根据我的评论:将,保留在其中可能不是一个好主意。怎么知道它已经被“逆转”了。同样,标准方式是First Middle LastLast, First Middle

PS。您可以将ucwords()大写到名称的首字母。只需将其包裹在爆破周围或爆炸之前

答案 1 :(得分:0)

这是两种有趣的方式。映射每个元素,爆炸并反向串联:

$result = array_map(function($v) {
                        $a = explode(',', $v);
                        return trim($a[1]).', '.trim($a[0]);
                    }, $names);

Example 1

或者,捕获两个名称并用相反的名称替换:

$result = preg_replace('/(\w+),\s+(\w+)/', '$2, $1', $names);

Example 2

  • 匹配单词\w一次或多次+并捕获到第1组()
  • 后跟,,然后间隔\s一次或多次+
  • 接着是\w一次或多次+个单词,并在第2组()中捕获
  • 将捕获组2替换为,,将空间和捕获组1替换为$2, $1