$name
(字符串)给出类似(可能的值)的内容:
John II, Litten Draw
我们应分两步更新$name
:
current_name.txt
(如果已经存在,则更新)并向其发送$name
“John II,Litten Draw”应该替换为“Litten Draw John II”。
感谢。
答案 0 :(得分:4)
喜欢这个吗?
$split = explode(",", $name, 1);
$name = trim($split[1]) . " " . trim(split[0]);
然后它只是basic file I/O。
如果你有一个单词列表(假设它们都在不同的行上):
$list = explode("\n", $names);
$nnames = "";
foreach($list as $name)
{
$split = explode(",", $name);
$nnames .= trim($split[1]) . " " . trim(split[0]) . "\n";
}
答案 1 :(得分:2)
这个正则表达式应该为你做...
preg_replace('#\\b(\\w+),\\s*(\\w+)\\b#', '\\2 \\1', $string);
基本上,它正在寻找:
\\b
部分)\\w+
部分),\\s*
)\\w+
部分)答案 2 :(得分:2)
正则表达式是这里的方式
$a = "Obama, Barak";
echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a);
也适用于多个名称:
$a = "
Obama, Barak
Federer, Roger
Dickens, Charles
";
echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a);
答案 3 :(得分:1)
答案 4 :(得分:1)
以下是一些应该可行的示例代码:
<?php
function getCanonicalName($name) {
// Check for the existance of a comma and swap 'elements' if necessary.
if(strpos($name, ',') !== false) {
list($surname, $forename) = explode(',', $name);
$name = $forename . ' ' . $surname;
}
// Trim the name.
return trim($name);
}
// Test data and file I/O.
$outputData = '';
$testData = array('Obama, Barak', 'Federer, Roger', 'John Parker');
foreach($testData as $name) {
$outputData .= getCanonicalName($name) . "\n";
}
file_put_contents('current_name.txt', $outputData, FILE_APPEND);
?>
顺便说一下,如果$ name中有多个逗号,这(就像当前附加到您问题的所有解决方案一样)都会导致数据丢失。因此,如果可以,您应该更新getCanonicalName以满足此可能性。