2017-04-10 23 views
0

私は1,9,56,566を含む$stringを持っているがないことを確認する方法、str_replace()を使用して、私はその文字列から番号を削除することができますが、私は、たとえば56のために削除した場合、その後$string1,9,,566が含まれていますし、私はその後、$string1を削除する場合代わりに,9,56,566となります。余分なコンマ

どのような番号を削除しても、開始時または終了時にカンマがないこと、番号間に1つ以上のカンマがないことを確認するにはどうすればよいですか?

$result = str_replace($numberToRemove, '', $string); 
+0

'$結果=(str_replace([ ',, '' ,,, ']、'、 ' $文字列)、'、')トリム;ローマ'片道。 – JustOnUnderMillions

答えて

1

trim(preg_replace('/,,+/', ',', ',1,,9,56,,,,,566,'),',') - >これは、複数のコンマのと同様に先頭と末尾のコンマの世話をします。

ただし、置換するときには、文字列内に同じ番号を持つ可能性を考慮する必要があります。あなたの例では、それは56になります。

str_replaceを56にすると、結果は1,9,,6になります。私は希望の結果が1,9,,566だと思います。そのような場合は、おそらくpreg_replaceが再度必要です:preg_replace('/(^|,)56(,|$)/', ',', '1,9,56,566')。これは、コンマで囲まれているか、または文字列の先頭または末尾にある場合にのみ、数値を削除します。明確にするために

は、ステップバイステップで行うことができます:

$starting_string = '1,9,56,566'; 
$number_to_remove = '56'; 
$result = preg_replace('/(^|,)'.$number_to_remove.'(,|$)/', ',', $starting_string); 
$result = preg_replace('/,,+/', ',', $result); 
$result = trim($result, ','); 
+0

これは動作します。以前に私が作ったコメントを気にしないでください。 –

0

+0

最初の数字が削除された場合、これは機能しません –

+1

私が言ったようにカンマを追いかけると、それは – RomMer

+0

かなり正しい@RomMerになります。私はあまりにも急に読んだ。 –

0

これは、ベースのすべてのシナリオをキャッチする必要があり、アレイの機能を使用していない、交換するだけの非常に単純な文字列である「」 は、その後で「,,」http://php.net/manual/fr/function.ltrim.php 、その後、str_replaceをLTRIMあなたの番号を削除あなたの質問に。

//this will remove the number with left comma 
$numberwithleftcommaToRemove=",".$numberToRemove; 
$result = str_replace($numberwithleftcommaToRemove, '', $string); 
//if there was no left comma, this will remove the number with right comma 
$numberwithrightcommaToRemove=$numberToRemove.","; 
$result = str_replace($numberwithrightcommaToRemove, '', $string); 
4

文字列内の数字を置き換えて、文字列を配列に分解して、空の配列項目を無視して再度埋め込むことができます。下のコード例を参照してください。

<?php 

function filterFunction($var) { 
    if($var == "0" || $var != "") { return true; } 
} 

$string = "1,0,9,56,566"; 
$numberToRemove = 9; 
$result = str_replace($numberToRemove, '', $string); 

$resultarray = explode(",",$result); 
$result = implode(",",array_filter($resultarray, "filterFunction")); 


echo $result; 

?> 

EDIT:あなたはそれで潜在的に多くの数字で長い文字列でこれをやりたいと思っている場合は、可能性を検討したいと思う

+1

これは、数値が「0」であると評価するため、数値を取り除きます。 – Andy

2

の下アンディにより補正さ0のを可能にするために、コールバック機能を追加しました1つまたは複数の行に複数のカンマがある場合(1つまたは2つ以上の場合)

また、交換する番号が別の番号の内側にある場合(56は 'inside' 566など)、どうなりますか?私のスニペットはそれを考慮しませんが、明確にする価値があります。

https://3v4l.org/pOP0p

<?php  
$numbers = ',,,1,56,0,32,9,56,566'; 
$numberToRemove = 56; 
$removed = str_replace($numberToRemove, '', $numbers); 
$kaPow = explode(',', $removed); 
$kaPow = array_filter($kaPow, 'strlen'); 
echo implode(',', $kaPow); 
+0

566が566であるとは考えていませんでした。もしあなたが数字の長さを比較して、同じ金額のものだけを削除すれば?そのようにすれば、566は削除されませんでした。 –

+0

私はあなたが正しいと思います。要素を削除し、str_replaceを完全に削除したい要素にマッチするarray_filterのコールバックをコーディングしてください。 – Andy

1

同時にカンマを削除する代わりにpreg_replaceを使用してください。パターンで

$string = preg_replace("/(^{$numberToRemove},|,{$numberToRemove}\b)/", '', $string); 

^{$numberToRemove},番号と一致する文字列の先頭でカンマを末尾、および,{$numberToRemove}\bは中央でまたは文字列の末尾に主要コンマと番号と一致します。


あなたはソリューションの一部として配列変換を使用するつもりなら、それは交換を行う前に、アレイに文字列を変換し、代わりにstr_replaceを使用しての配列から番号を削除するには、おそらくより良いですし、残りのコンマを処理しようとしています。最終的な調整として

$numbers = explode(',', $string); 

array_filter($numbers, function ($n) use ($numberToRemove) { 
    return $n != $numberToRemove; 
}); 

$string = implode(',', $numbers); 
+0

これを使用して、何らかの理由で文字列の最後の番号を削除することはできません。 –

+0

申し訳ありません。ええ、私はちょうど私のエラーを認識した。私は答えを編集しようとしています。 –

+0

@ P.Nickさて、各(開始/終了/中間)のケースでうまくいくはずです。 –

1

は、numberToRemoveにカンマを追加し、検索文字列にカンマを追加し、任意の末尾のカンマをトリミング。値stringの間にクリーンな1カンマで始めると、同じように終わるはずです。

$result = trim(str_replace($numberToRemove.',', '', $string.','), ',');