PHP replace string
$name
(string) gives something like (possible value):
John II, Litten Draw
We should update $name
in two steps:
- Catch the words before first comma and throw them to the end of the string
- Remove first comma
- Create a file
current_name.txt
(or update if already exists) and throw to it source of$name
"John II, Litten Draw" should be replaced with "Litten Draw John II".
Thanks.
Like this?
$split = explode(",", $name, 1);
$name = trim($split[1]) . " " . trim(split[0]);
Then it's just basic file I/O.
If you have a list of words (assuming they are all on separate lines):
$list = explode("\n", $names);
$nnames = "";
foreach($list as $name)
{
$split = explode(",", $name);
$nnames .= trim($split[1]) . " " . trim(split[0]) . "\n";
}
This regex should do it for you...
preg_replace('#\\b(\\w+),\\s*(\\w+)\\b#', '\\2 \\1', $string);
Basically, it's looking for:
- A word boundry (the
\\b
part) - Then one or more word characters (the
\\w+
part) - Then a comma followed by zero or more whitespace characters (
,\\s*
) - Then one or more word characters (the
\\w+
part) - Finally, another word boundry...
regular expressions are the way to go here
$a = "Obama, Barak";
echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a);
also works for multiple names:
$a = "
Obama, Barak
Federer, Roger
Dickens, Charles
";
echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a);
Here's some sample code that should work OK:
<?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);
?>
Incidentally, this (like all of the solutions currently attached to your question) will cause data loss if there's more than one comma in $name. As such, if this is possible you should update getCanonicalName to cater for this eventuality.
See strpos
to find the comma, ltrim
to remove the whitespace, and fopen
with the mode a
to append to the file. You can also use explode
to split around the comma, which is usually easier
精彩评论