2011-01-29 12 views
1
$data = "google,bing,searchengine,seo,search"; 

$exp = explode(",",$data); 

$filtr = array("google","bing"); 

$fdat = str_replace($filtr,"",$data); 

$clean = implode(",",$fdat); 

echo $clean; 

これが出ていますがどのように私は、最初の二つのブランクカンマを取り除くことができますか?,,searchengine,seo,search空白を取り除く方法を教えてください。

を置きますか

答えて

6

より良いあなたの分割さアレー$expマイナス$filtrの違いを取得:

$clean = implode(',', array_diff($exp, $filtr)); 

これもbike,carpetを生じるはずであるあなただけbike,car,carpetからcarを削除するときのように別の単語の部分文字列を削除しますチャンスを避けることができますをし、 bike,petにはありません。

そして、あなたがそれぞれの単語の前後に空白を許可したい場合は、trimpreg_splitを使用することを検討:

$exp = preg_split('/\s*,\s*/', trim($data)); 

trimのいずれかと末尾の空白を削除し、preg_splitのためのパターンがあまりにもコンマの周囲の空白を可能にします。

+0

1 ideoneリンク: –

+0

すごい何のアイデアが短すぎることはええ、これは感謝の作品 –

0

このコードを試したときにエラーが発生しました。あなたは、カンマで区切られた文字列から(配列である)グーグル&ビングを削除するために使用することができます以下

$data = "google,bing,searchengine,seo,search";
$exp = explode(",",$data);
$filtr = array("google","bing");
$diff = array_diff($exp, $filtr);
$clean = implode(",",$diff);
echo $clean;

+0

http://ideone.com/c9J04 –

0
コードのあなたの作品もこのようになります

$data = "google,bing,searchengine,seo,search"; 

$exp = explode(",",$data); 

$filtr = array("google","bing"); 

foreach ($exp as $key => $item) { 
    if (in_array($key, $filtr)) unset($exp[$key]); 
} 

$clean = implode(",",$exp); 

echo $clean; 

その$ dataに項目が少ない場合に便利です。大きな配列の場合、最適化が必要です。

0

そうのようなループ内で値をチェックする場合は、より良いでしょう:

$data = "google,bing,searchengine,seo,search"; 
$exp = explode(",",$data); 
$filtr = array("google","bing"); 

foreach($exp as $k => $v) 
{ 
    if(in_array($v,$filtr)) 
    { 
     unset($ext[$k]); 
    } 
} 
$clean = implode(",",$ext); 
echo $clean; 
関連する問題