如何在PHP中去除空格后的所有内容?

21

我有一个数据库,其中包含名称,我想使用PHP替换名称中空格后面的内容,数据示例:

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

我希望它返回

Laura
John.
John
8个回答

31

只是为了加入这个技巧,我最近学会了这种方法:

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

我只是进行了一个快速的基准测试,因为我以前没有遇到过strtok方法,而在给定的示例字符串上,strtok比我的列表/分裂解决方案快25%。

而且,初始字符串越长/分隔符越多,性能差距就会越大。给定一个包含5000个单词的块,explode将创建一个包含5000个元素的数组。strtok将仅获取第一个“元素”并将其余部分留存在内存中作为字符串。

所以对我来说,strtok胜出。

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

27

使用这个方法,可以替换空格之后的任何内容。也适用于破折号:

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

11
这里有两个可能存在的问题:由于使用了strrpos()函数,它会查找最后一个空格,因此在处理"Hello Nice World"这样的字符串时,可能会得到像"Hello Nice"这样的名称。第二点是,当名字中没有任何空格时,它将不返回任何内容。虽然这种行为可能是期望的,但也可能会引起烦恼。 - str
@str 如果您有任何建议解决方案,欢迎随时添加到我的答案中。 - TheBlackBenzKid
需要使用strpos() - Lysak

13

试一试

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

strtok


7

无需使用正则表达式,只需使用explode方法。

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

1
我认为你可以这样写:$item = explode(" ", $x)[0]; - Mike Kormendy

1
TheBlackBenzKid提供的方法对于这个问题是有效的 - 但是当遇到不包含空格的参数时,它将返回一个空字符串。
虽然正则表达式会更加耗费计算资源,但它们提供了更多的灵活性,例如:
function get_first_word($str)
{
 return (preg_match('/(\S)*/', $str, $matches) ? $matches[0] : $str);
}

1
这个答案将会删除第一个空格之后的所有内容,而不是像被接受的答案一样删除最后一个空格。使用strpossubstr
$str = "CP hello jldjslf0";
$str = substr($str, 0, strpos( $str, ' '));
echo $str;

1

我在这个具体任务中一直使用一个未提及的函数调用。

strstr() 的第三个参数设置为 true,将返回针字符串第一次出现之前的子字符串。

代码:(演示

$array = [
    'x' => 'Laura Smith',
    'y' => 'John. Smith',
    'z' => 'John Doe'
];

foreach ($array as $key => $value) {
    $array[$key] = strstr($value, ' ', true);
}

var_export($array);

输出:

array (
  'x' => 'Laura',
  'y' => 'John.',
  'z' => 'John',
)

请注意,如果在字符串中未找到指定的字符,strstr() 将返回 false
附言:
  • 由于有单一功能的技术可执行此任务,没有必要使用多个函数技术 来完成相同的工作。
  • 因为指定的字符是一个静态字符串(空格),所以绝对不需要引入正则表达式调用的开销
  • 如果有人考虑 使用 explode() 生成临时数组,而不是使用更直接的“字符串输入 - 字符串输出”操作,例如 strtok()strstr(),请确保声明 explode() 的第三个参数,使用表示目标元素索引加 1 的整数 -- 这样,一旦它分离出您寻找的子字符串,该函数就会停止创建新元素。

0

你也可以这样做

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接