1

現在、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」の後に末尾の「カンマ」がないため、機能しません

文字列から特定の数字を削除するより良い方法はありますか?

ありがとう。

4

6 に答える 6

2

もう 1 つの問題は、ユーザー 5 がいて、それらを削除しようとすると、15 を 1 に、25 を 2 に、というように変換することです。そのため、両側のコンマを確認する必要があります。

このように区切られた文字列が必要な場合は、検索とリストの両方の両端にカンマを置きますが、非常に長くなると効率が悪くなります。

例は次のとおりです。

$receivers = substr(str_replace(','.$usrID.',', ',', ','.$string.','),1,-1);
于 2009-08-04T04:28:48.477 に答える
2

文字列を配列に分解できます。

$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)

正規表現ほど「単純」ではないかもしれません。しかし、要素をさらに処理する必要がある日 (または、要素が単純な数値よりも複雑になる日) には、それでも機能します :-)


EDIT : 2 つのカンマがある場合のように、「空の」値を削除する場合は、次のように条件を変更するだけです。

foreach ($list as $key => $value) {
    if ($value == $usrID || trim($value)==='') {
        unset($list[$key]);
    }
}

$valuesつまり、空の を除外します。「trim」が使用されているので$string = "22,23, ,24,25";、対処することもできます。

于 2009-08-04T04:29:18.477 に答える
2

少し単純だと思いますが、パスカルのものに似たオプション:

$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 を見つけ、存在する場合は設定を解除してから、配列を再度内破します。

于 2009-08-04T04:33:47.877 に答える
0

私は簡単な方法をとります: リストの周りにコンマを追加し、",23," を 1 つのコンマに置き換えてから、余分なコンマを削除します。速くて簡単。

$usrID = 23;
$string = "22,23,24,25";
$receivers = trim(str_replace(",$usrID,", ',', ",$string,"), ',');

そうは言っても、コンマ区切りのリストで値を操作することは、通常、設計が不適切であることを示しています。これらの値は、代わりに配列にする必要があります。

于 2009-08-04T09:33:02.677 に答える
-1

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: onnodb のコメントに対処$pattern = '/' . $usrID . ',?/iするために変更されました...$pattern = '/\b' . $usrID . '\b,?/i'

于 2009-08-04T04:25:43.293 に答える
-2

簡単な方法 (すべての 2 桁の数字を提供する):

$string = str_replace($userId, ',', $string);
$string = str_replace(',,','', $string);
于 2009-08-04T07:13:42.333 に答える