2013-10-24 92 views
1

下面的代码已被直接取自PHP: preg_split - 手动PHP使preg_split除去逗号和尾部空白

实施例#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); 
?> 

上面的例子将输出:

Array 
(
    [0] => hypertext 
    [1] => language 
    [2] => programming 
) 

我创建一个标签系统,这将让人们输入什么放入一个文本框中,返回后文本将被处理并插入到数据库中。数据可以是一个单词或一个短语,如果输入多个标签,它将使用逗号分隔。

因此,我希望能够保持“超文本语言”原样,因此只能删除字符串开头和结尾的空格以及逗号后的任意空格,而不能在单词之间这可能是短语。

+0

尝试使用带有爆炸 “” 作为分隔符。 请参阅[手册](http://php.net/manual/en/function.explode.php)。 – jpodwys

+0

但是,我已经尝试过,并不总是一个逗号,我正在更新您提出的问题。 – Mike

回答

4

您可以使用array_map()explode()trim()

<?php 
    $keywords = array_map('trim', explode(',', 'hypertext language, programming')); 
    print_r($keywords); 
?> 

这将输出:

Array 
(
    [0] => hypertext language 
    [1] => programming 
) 

DEMO

+0

不错,简洁。也会建议strtolower保持标签不区分大小写。 – Homer6

+0

什么是首选方法,preg_split或您的方法? – Mike

+0

@Mike如果你正在做这么简单的事情,请远离正则表达式。经验法则是,只有当“常规”解决方案非常复杂或不可能时才能使用正则表达式(这里都不是这种情况)。 – h2ooooooo

4

我觉得IT'IS的最佳选择。

$keywords = preg_split('/\s*,\s*/', "hypertext language, programming"); 

所有首先“正则表达式是非常慢”是错误的,因为它总是依赖于模式。在这种情况下,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); 

array_map(trim), explode = 0.32 
Preg split = 0.22