我正在学习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);
}
答案 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
)
我可以解释这些函数的作用……
如果您绝对希望将,
放回原处,我认为这是个坏主意,则可以更改此内容:
$name = implode(', ', ...... );
根据我的评论:将
,
保留在其中可能不是一个好主意。怎么知道它已经被“逆转”了。同样,标准方式是First Middle Last
或Last, First Middle
PS。您可以将ucwords()
大写到名称的首字母。只需将其包裹在爆破周围或爆炸之前
答案 1 :(得分:0)
这是两种有趣的方式。映射每个元素,爆炸并反向串联:
$result = array_map(function($v) {
$a = explode(',', $v);
return trim($a[1]).', '.trim($a[0]);
}, $names);
或者,捕获两个名称并用相反的名称替换:
$result = preg_replace('/(\w+),\s+(\w+)/', '$2, $1', $names);
\w
一次或多次+
并捕获到第1组()
,
,然后间隔\s
一次或多次+
\w
一次或多次+
个单词,并在第2组()
中捕获,
,将空间和捕获组1替换为$2, $1