2010-08-09 126 views
1

$name(串)給出了類似的信息(可能值):PHP替換字符串

John II, Litten Draw 

我們應該更新$name兩個步驟:

  1. 抓住第一個逗號之前的話,扔至字符串的結尾
  2. 刪除第一個逗號
  3. 創建一個文件current_name.txt(或更新,如果已經存在)並拋給它的來源$name

「John II,Litten Draw」應替換爲「Litten Draw John II」。

謝謝。

+0

從 「current_name.txt」 文件做這些名字? (如果是的話,他們每行一個?) – 2010-08-09 14:29:57

+3

這是一個家庭作業的分配? – 2010-08-09 14:30:27

+2

@Fernando不,這是一個後續http://stackoverflow.com/questions/3440442/php-external-page – Gordon 2010-08-09 14:32:30

回答

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來迎合這種可能性。

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"; 
} 
+0

它會使用更多的謝謝2個字? – James 2010-08-09 14:35:51

+0

'file_put_contents' =將字符串轉儲到文件的簡單方法 – 2010-08-09 14:36:21

+0

@Ignatz:不可以。這將適用於一個字對。我將更新以處理由換行符('\ n')刪除的列表。 – 2010-08-09 14:37:11

1

strpos找到逗號,ltrim刪除空格,並fopen與模式a追加到文件。您還可以使用explode分裂周圍的逗號,這是通常更容易

+0

你不需要找到逗號。拆分,修剪,reconcat。 – 2010-08-09 14:32:21

+0

@Josh好了,'爆炸'也是「找到逗號」,只是不手動。我更喜歡'爆炸',但我試圖給他正是他要求的子彈 – 2010-08-09 14:33:14

2

此正則表達式應該爲你做...

preg_replace('#\\b(\\w+),\\s*(\\w+)\\b#', '\\2 \\1', $string); 

基本上,它是在尋找:

  1. 字邊界(\\b部分)
  2. 然後一個或多個單詞字符(\\w+部分)
  3. 然後一個逗號後跟一個零個或多個空白字符(,\\s*
  4. 然後一個或多個單詞字符(\\w+部分)
  5. 最後一個字boundry ...
+0

這不起作用 – James 2010-08-09 16:21:45

+0

你能解釋你的意思是「這不行」嗎?我已經在我的機器上試過了,並且它工作得很好... – ircmaxell 2010-08-09 16:26:12

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); 
+0

此代碼將「Nadal,Rafael」替換爲「nbsp Nadal; Rafael」 – James 2010-08-09 16:13:42