2010-08-02 52 views
1

我有逗号(它们可能含有其他字符),或者是空的,但一般这样看分离的名单:最快在一个逗号删除值的方式分隔列表

NameA,NameB,NameC 

我需要创建一个函数来删除一个名称,如果它存在于列表中并且它恢复了逗号分隔的结构。

例如:如果NAMEA将被删除,我应该结束了:

NameB,NameC 

,NameB,NameC 

同样的休息。

这就是我想出的,有没有更好的解决方案?

 $pieces = explode(",", $list); 

     $key=array_search($deleteuser, $pieces); 
     if(FALSE !== $key) 
     { 
      unset($pieces[$key]); 
     } 

     $list = implode(",", $pieces); 
+3

你为什么需要“最快”的方式?有什么特别的原因吗? – 2010-08-02 12:15:34

+0

不,没有什么特别的,但explode/array_search/implode方法似乎很慢...... – DrMHC 2010-08-02 13:27:00

+0

这些方法很慢,因为它们是数组操作。字符串操作似乎更快。请参阅下面的答案,了解不使用数组操作的方法。 – 2010-08-02 13:31:32

回答

1

您可以使用array_splice函数从数组中删除。用偏移量= array_search($ deleteuser,$件)和长度= 1。

-1

您也可以尝试正则表达式这样的(也许它可以被优化):

$search = 'NameB'; 
$list = 'NameA,NameB,NameC'; 
$list = preg_match('/(^' . $search . ',)|(,' . $search. ')/', '', $list);