質問

現在、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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top