PHP替换字符串

时间:2010-08-09 14:27:41

标签: php string

$name(字符串)给出类似(可能的值)的内容:

John II, Litten Draw

我们应分两步更新$name

  1. 在第一个逗号之前抓住单词并将它们抛到字符串
  2. 的末尾
  3. 删除第一个逗号
  4. 创建一个文件 current_name.txt(如果已经存在,则更新)并向其发送$name
  5. 的来源

    “John II,Litten Draw”应该替换为“Litten Draw John II”。

    感谢。

5 个答案:

答案 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);

基本上,它正在寻找:

  1. 单词边界(\\b部分)
  2. 然后是一个或多个单词字符(\\w+部分)
  3. 然后是逗号,后跟零个或多个空格字符(,\\s*
  4. 然后是一个或多个单词字符(\\w+部分)
  5. 最后,另一个词边界......

答案 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)

请参阅strpos查找逗号,ltrim删除空白,fopen添加模式a以附加到文件。您还可以使用explode分隔逗号,这通常更容易

答案 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以满足此可能性。