質問
現在、str_replaceを使用してusrIDとその直後の「コンマ」を削除しています:
例:
$usrID = 23;
$string = "22,23,24,25";
$receivers = str_replace($usrID.",", '', $string); //Would output: "22,24,25"
ただし、次の場合に気付きました:
$usrID = 25; //or the Last Number in the $string
「25」の後に末尾の「コンマ」がないため、機能しません
文字列から特定の番号を削除するより良い方法はありますか?
ありがとう。
解決
文字列を配列に分解できます:
$list = explode(',', $string);
var_dump($list);
あなたに与えるもの:
array
0 => string '22' (length=2)
1 => string '23' (length=2)
2 => string '24' (length=2)
3 => string '25' (length=2)
次に、その配列に対して必要なことを行います。不要になったエントリを削除するなど:
foreach ($list as $key => $value) {
if ($value == $usrID) {
unset($list[$key]);
}
}
var_dump($list);
あなたに与えるもの:
array
0 => string '22' (length=2)
2 => string '24' (length=2)
3 => string '25' (length=2)
そして最後に、ピースを元に戻します:
$new_string = implode(',', $list);
var_dump($new_string);
そして、あなたは欲しいものを手に入れます:
string '22,24,25' (length=8)
「シンプル」ではないかもしれません正規表現として;しかし、要素をもっと使う必要がある日(または要素が単なる数字よりも複雑な日)、それでも動作します:-)
編集:および「空」を削除する場合は、値は、コンマが2つある場合など、条件を変更するだけで、次のようになります。
foreach ($list as $key => $value) {
if ($value == $usrID || trim($value)==='') {
unset($list[$key]);
}
}
ie、つまり空の $ values
を除外します。 " trim
" $ string =" 22,23、、24,25&quot ;;
も処理できるように使用されています。
他のヒント
もう1つの問題は、ユーザー5がいて、それらを削除しようとすると、15を1に、25を2に、などに変更することです。したがって、両側のコンマを確認する必要があります。
そのような区切り文字列が必要な場合は、検索とリストの両方の両端にコンマを付けますが、非常に長くなると効率が悪くなります。
例は次のとおりです。
$receivers = substr(str_replace(','.$usrID.',', ',', ','.$string.','),1,-1);
Pascalのオプションに似ていますが、少し似ていると思います:
$usrID = 23;
$string = "22,23,24,25";
$list = explode(',', $string);
$foundKey = array_search($usrID, $list);
if ($foundKey !== false) {
// the user id has been found, so remove it and implode the string
unset($list[$foundKey]);
$receivers = implode(',', $list);
} else {
// the user id was not found, so the original string is complete
$receivers = $string;
}
基本的に、文字列を配列に変換し、ユーザーIDが存在する場合はそれを検索し、設定を解除してから再度配列を分解します。
簡単な方法を使用します。リストの周りにコンマを追加し、"、23、"を置き換えます。単一のコンマを使用して、余分なコンマを削除します。高速かつシンプル。
$usrID = 23;
$string = "22,23,24,25";
$receivers = trim(str_replace(",$usrID,", ',', ",$string,"), ',');
とはいえ、コンマ区切りのリストで値を操作することは通常、設計が悪いことの兆候です。代わりに、これらの値は配列内にある必要があります。
pregを使用してみてください:
<?php
$string = "22,23,24,25";
$usrID = '23';
$pattern = '/\b' . $usrID . '\b,?/i';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);
?>
更新: $ pattern = '/ $ usrID、?/ i';
を $ pattern = '/'に変更しました。 $ usrID。 '、?/ i';
Update2: $ pattern = '/'を変更しました。 $ usrID。 '、?/ i
から $ pattern =' / \ b 'へ。 $ usrID。 '\ b、?/ i'
でonnodbのコメントに対処します...
簡単な方法(2桁の数字すべてを提供):
$string = str_replace($userId, ',', $string);
$string = str_replace(',,','', $string);