2011-12-30 235 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);