2012-08-29 52 views

回答

13

做这个

$x="Laura Smith"; 
$y="John. Smith" 
$z="John Doe"; 

,这取代了什么之后的空格字符。也可用于破折号:

$str=substr($str, 0, strrpos($str, ' ')); 
+8

两个潜在的问题是:当你使用'strrpos() ',* last * whitespace被搜索,你可能会得到像“Hello Nice”这样的名字,例如“Hello Nice World”这样的字符串。第二点是,当名称中没有空格时,它不会返回任何内容。虽然可能需要这种行为,但也可能会导致烦恼。 – str

5

有没有必要使用正则表达式,只需使用explode方法。

$item = explode(" ", $x); 
echo $item[0]; //Laura 
+1

我想你也可以去$ item = explode(“”,$ x)[0]; –

-1

$ x =“Laura Smith”; $ temparray = implode('',$ x); echo $ temparray [0];

对不起,有时候混淆了内爆和爆炸......

0

你也可以做这样的

$str = preg_split ('/\s/',$x); 
print $str[0]; 
7

试试这个

<?php 
$x = "Laura Smith"; 
echo strtok($x, " "); // Laura 
?> 

strtok

0

TheBlackBenzKid提供的方法适用于这个问题 - howev呃当提供一个不含空格的参数时,它会返回一个空白字符串。

虽然正则表达式会更计算昂贵,他们提供了更多flexibiltiy,如:

function get_first_word($str) 
{ 
return (preg_match('/(\S)*/', $str, $matches) ? $matches[0] : $str); 
} 
15

只需将其添加到组合,我最近才知道这个技巧:

list($s) = explode(' ',$s); 

我只是做了一个快速的基准测试,因为我之前没有遇到过strtok的方法,而strtok比我的列表/爆炸解决方案快了25%,关于给出的示例字符串。

此外,初始字符串越长/越界,性能差距越大。给出一个5000字的块,爆炸将产生5000个元素的数组。 strtok将只取第一个“元素”,并将其余的内容作为字符串保留。

所以strtok赢了我。

$s = strtok($s,' '); 
+0

这应该是被接受的答案。感谢您检查性能。 – Marcel

0

这个答案将第一空间后删除一切,不是最后如在接受answer.Using strpos情况和substr

$str = "CP hello jldjslf0"; 
$str = substr($str, 0, strpos($str, ' ')); 
echo $str; 
相关问题