下面的代码直接取自PHP:preg_split - Manual
示例#1 preg_split()示例:获取搜索字符串的各个部分
<?php
// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
?>
Run Code Online (Sandbox Code Playgroud)
上面的例子将输出:
Array
(
[0] => hypertext
[1] => language
[2] => programming
)
Run Code Online (Sandbox Code Playgroud)
我正在创建一个标记系统,允许人们在文本框中键入任何内容,并在返回时处理文本并将其插入数据库.数据可以是一个单词或短语,如果键入多个标签,则将使用逗号分割.
因此,我希望能够按原样保留"超文本语言",因此只删除字符串开头和结尾处的空白区域以及逗号后面的任何空白区域,但不能删除可能是短语的单词之间的空白区域.
您可以使用array_map(),explode()和trim():
<?php
$keywords = array_map('trim', explode(',', 'hypertext language, programming'));
print_r($keywords);
?>
Run Code Online (Sandbox Code Playgroud)
这将输出:
Array
(
[0] => hypertext language
[1] => programming
)
Run Code Online (Sandbox Code Playgroud)
我认为这是最好的选择.
$keywords = preg_split('/\s*,\s*/', "hypertext language, programming");
Run Code Online (Sandbox Code Playgroud)
首先 "正则表达式慢得多"是错误的,因为它总是取决于模式.在这种情况下,preg_split()更快.
第二个 preg_split更具可读性,并且实践显示更有利可图的选项.把事情简单化.
$b = "hypertext language, programming";
$time = microtime(1);
for ($i=1; $i<100000; $i++)
$a = array_map('trim', explode(',', $b)); // Split by comma
printf("array_map(trim), explode = %.2f\n", microtime(1)-$time);
$time = microtime(1);
for ($i=1; $i<100000; $i++)
$a = preg_split('/\s*,\s*/', $b); // Split by comma
printf("Preg split = %.2f\n", microtime(1)-$time);
Run Code Online (Sandbox Code Playgroud)
array_map(trim), explode = 0.32
Preg split = 0.22
Run Code Online (Sandbox Code Playgroud)