我有一个有名字的数据库,我想在名称上的空格后面使用 PHP 替换,数据示例:
$x="Laura Smith";
$y="John. Smith"
$z="John Doe";
我希望它返回
Laura
John.
John
只是为了将其添加到组合中,我最近学习了这种技术:
list($s) = explode(' ',$s);
不过,我只是做了一个快速的基准测试,因为我以前没有遇到过 strtok 方法,在给出的示例字符串上,strtok 比我的列表/爆炸解决方案快 25%。
此外,初始字符串越长/分隔得越多,性能差距就越大。 给一个 5000 个单词的块,爆炸将制作一个包含 5000 个元素的数组。 strtok 将只获取第一个"元素",并将其余部分作为字符串保留在内存中。
所以斯特托克为我赢了。
$s = strtok($s,' ');
这样做,这将替换空格字符之后的任何内容。也可用于破折号:
$str=substr($str, 0, strrpos($str, ' '));
试试这个
<?php
$x = "Laura Smith";
echo strtok($x, " "); // Laura
?>
斯特托克
不需要
使用正则表达式,只需使用 explode 方法即可。
$item = explode(" ", $x);
echo $item[0]; //Laura
TheBlackBenzKid 提供的方法对该问题有效 - 但是当出现不包含空格的参数时,它将返回一个空白字符串。
尽管正则表达式的计算成本更高,但它们提供了更多的灵活性,例如:
function get_first_word($str)
{
return (preg_match('/('S)*/', $str, $matches) ? $matches[0] : $str);
}
此答案将删除第一个空格之后的所有内容,而不是像接受答案那样删除最后一个空格。使用strpos
和substr
$str = "CP hello jldjslf0";
$str = substr($str, 0, strpos( $str, ' '));
echo $str;
有一个未提及的函数调用,我一直用于这个确切的任务。
第三个参数为 true 的 strstr(( 将在指针字符串第一次出现之前返回子字符串。
代码:(演示(
$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()
,请务必使用表示目标元素索引 + 1 的整数声明explode()
的第三个参数 - 这样函数将在隔离您寻找的子字符串后立即停止创建新元素。
你也可以这样做
$str = preg_split ('/'s/',$x);
print $str[0];