2014-08-29 30 views
1

最初我有一個問題從數據庫中做選擇時:選擇 - 只有從姓

從我的一個表列包含從人的名字。假設它看起來像這樣:

1. John Smith 
2. William Thorne 
3. Mark Johanson 

好的,我已經給你展示了一些隨機名稱的例子。

的事情是,兩者的名字和姓氏是在同一列,結果我要來,當我在做我的PHP文件中的選擇是這樣的:

1. John S. 
2. William T. 
3. Mark J. 

我想從每個人的姓氏,只顯示姓氏的首字母。有沒有可能做到這一點?如果有的話,任何幫助都會很棒。

我的代碼選擇的例子是在這裏:

$result = mysql_query("SELECT * FROM feedback_rate 
         WHERE accept=1 
         ORDER BY date DESC 
         LIMIT $start,$rows_per_page",$con); 

感謝您提前幫助。

+0

依託在指定姓名的空間上是不可靠的。你對Mary Jo De Rossi做什麼? – TunaMaxx 2014-08-29 07:51:45

+0

大概瑪麗J. – 2014-08-29 07:52:50

+0

@GeorgeGarchagudashvili瑪麗喬是一個雙重名稱,瑪麗J將不會是正確的看規格。 – 2014-08-29 08:02:18

回答

4

你必須認識到這是非常困難的。電腦不知道名字,他們不知道名字是什麼,姓是什麼。因此,你必須做出並非總是如此的假設。我假設總是隻有一個名字。然後在PHP中使用以下步驟很容易解決:

  1. 將名稱拆分爲單詞。
  2. 更改最後一個單詞。
  3. 把它們重新放在一起。

這是如何做到這一點:

$parts = explode(' ',$fullName); 
$firstName = array_pop($parts); 
$initial = substr($firstName,0,1); 
array_push($parts,$initial.'.'); 
$fullName = implode(' ',$parts); 

現在$全名中將包含你想要的東西。代碼看起來有點長,但那是因爲我試圖一步一步展示它。

+0

工作完美!你拯救了我的生活:)非常感謝你! – Emi 2014-08-29 08:05:55

+1

PHP可以做到這一點很短:'$ fullName = substr($ fullName,0,strrpos($ fullName,'')+1)。'。';'但是這會更難理解?更多的變體是可能的。 – 2014-08-29 08:11:18

+1

請注意,此方法不支持多字節,因此使用UTF-8輸入時可能會損壞輸出。 – CamaroSS 2014-08-29 08:23:05

1

這是更好的PHP操縱數據(保留原始數據不變,它總是好的做法):

$name = "John Sephre"; 
$expl = explode(' ', $name); 

echo $expl [0].' '.$expl[1][0]; 

輸出:

John S 

如果你要去有長的名字:

$name = "John Sephre More"; 
$expl = explode(' ', $name); 

$last = end($expl); 

echo $expl[0].' '.$last[0]; 

輸出:

John M 

此外,我會建議爲此目的創建功能:

function makeShortName($fullName) 
{ 
    $expl = explode(' ', $fullName); 

    $shortened = $expl[0]; 

    if(count($expl) > 1) 
    { 
     $last = end($expl); 
     $shortened .= ' '.$last[0].'.'; 
    } 

    return $shortened; 
} 

所以,如果你通過只是John它將返回John如果你通過John nickname Surname結果將是John S.