2011-12-30 28 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

8

文字列(str_getcsv)を分解して検索した用語を削除するのと同じくらい簡単です。あなたは配列を持っている場合は、array_diffは、それは非常に簡単になります:

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

str_getcsvはPHP5.3 +のみですが、これは私が推奨する解決策です。 OPが共有ホスティングを使用している場合、引き続きPHP5.2を実行している多くのホスティング企業が存在します。 – liquorvicar

+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

3

Working demo:これを試してみてください。

これは、両方の文字列入力を配列に変換し、リストとしてexplode()を使用します。次に、最初の配列ではなく2番目の配列にあるものを出力するために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); 
関連する問題