2011-12-30 236 views
4

移除项目比方说,我有一个字符串:从逗号分隔的字符串

cat,mouse,dog,horse 

是否有一个正则表达式或将表现为如下的功能?

1)"cat"  return string ->"mouse,dog,horse" 
    2)"mouse"  return string ->"cat,dog,horse" 
    3)"dog"  return string ->"cat,mouse,horse" 
    4)"horse"  return string ->"cat,mouse,dog" 

我需要从字符串中消除选定的项目并返回字符串的其余部分。

回答

14

你的意思是一个函数,删除某个元素?试试这个:

function removeFromString($str, $item) { 
    $parts = explode(',', $str); 

    while(($i = array_search($item, $parts)) !== false) { 
     unset($parts[$i]); 
    } 

    return implode(',', $parts); 
} 

Demo

+1

嘿,谢谢很多人!并感谢codepad.org的介绍 – dinchakpianist 2011-12-30 06:06:09

8

就像爆炸字符串(str_getcsv)一样简单,然后删除搜索到的字词。如果你有一个数组,然后array_diff使得它非常简单:

return array_diff(str_getcsv($list), array($search)); 
+1

这将是我的首选解决方案,尽管注意str_getcsv只是PHP5.3 +。如果OP使用共享主机,仍然有很多hosing公司仍在运行PHP5.2。 – liquorvicar 2011-12-30 12:57:46

+1

@liquorvicar:这只是一个小障碍。我自己受到5.2主机的困扰,但是['PHP_Compat'](http://pear.php.net/package/PHP_Compat/)和['upgradephp'](http://include-once.org/p/upgradephp /)几乎解决了这个问题。一些用户级仿真甚至超过了本机功能,所以有时在5.2服务器上运行5.3功能是有益的;) – mario 2011-12-30 13:52:29

3

Working demo

这将字符串输入转换为数组,使用explode()作为列表。然后,您只需执行array_diff()即可输出第二个数组中的内容,但不是第一个。最后我们把implode()的一切都转换回CSV格式。

$input = 'cat'; 
$list = 'cat,mouse,dog,horse'; 

$array1 = Array($input); 
$array2 = explode(',', $list); 
$array3 = array_diff($array2, $array1); 

$output = implode(',', $array3);