2014-08-29 31 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.