我有一个数据库,其中包含名称,我想使用PHP替换名称中空格后面的内容,数据示例:
$x="Laura Smith";
$y="John. Smith"
$z="John Doe";
我希望它返回
Laura
John.
John
我有一个数据库,其中包含名称,我想使用PHP替换名称中空格后面的内容,数据示例:
$x="Laura Smith";
$y="John. Smith"
$z="John Doe";
我希望它返回
Laura
John.
John
只是为了加入这个技巧,我最近学会了这种方法:
list($s) = explode(' ',$s);
我只是进行了一个快速的基准测试,因为我以前没有遇到过strtok方法,而在给定的示例字符串上,strtok比我的列表/分裂解决方案快25%。
而且,初始字符串越长/分隔符越多,性能差距就会越大。给定一个包含5000个单词的块,explode将创建一个包含5000个元素的数组。strtok将仅获取第一个“元素”并将其余部分留存在内存中作为字符串。
所以对我来说,strtok胜出。
$s = strtok($s,' ');
使用这个方法,可以替换空格之后的任何内容。也适用于破折号:
$str=substr($str, 0, strrpos($str, ' '));
无需使用正则表达式,只需使用explode方法。
$item = explode(" ", $x);
echo $item[0]; //Laura
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;
我在这个具体任务中一直使用一个未提及的函数调用。
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 的整数 -- 这样,一旦它分离出您寻找的子字符串,该函数就会停止创建新元素。你也可以这样做
$str = preg_split ('/\s/',$x);
print $str[0];
strrpos()
函数,它会查找最后一个空格,因此在处理"Hello Nice World"这样的字符串时,可能会得到像"Hello Nice"这样的名称。第二点是,当名字中没有任何空格时,它将不返回任何内容。虽然这种行为可能是期望的,但也可能会引起烦恼。 - strstrpos()
。 - Lysak