PHP str_replace

时间:2009-08-04 04:21:01

标签: php mysql substr

我目前正在使用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'之后没有尾随'逗号'

我可以从字符串中删除特定数字吗?

感谢。

6 个答案:

答案 0 :(得分:2)

另一个问题是如果你有一个用户5并尝试删除它们,你将15变成1,25变成2等等。所以你必须检查双方的逗号。

如果你想要一个这样的分隔字符串,我会在搜索和列表的两端放一个逗号,但如果它变得很长就会效率低。

一个例子是:

$receivers = substr(str_replace(','.$usrID.',', ',', ','.$string.','),1,-1);

答案 1 :(得分: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)

也许不像正则表达式那样“简单”;但是当你需要用你的元素做更多的事情时(或者你的元素比普通数字更复杂的那一天),这仍然有效: - )


编辑:如果你想删除“空”值,比如当有两个逗号时,你只需要修改条件,有点像这样:

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

即,排除空的$values。使用了“trim”,因此也可以处理$string = "22,23, ,24,25";,顺便说一句。

答案 2 :(得分:2)

类似于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(如果存在),取消设置,然后再次内爆数组。

答案 3 :(得分:0)

我会采用简单的方法:在列表中添加逗号,用一个逗号替换“,23”,然后删除多余的逗号。快速而简单。

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

话虽如此,在逗号分隔列表中操纵值通常是糟糕设计的标志。这些值应该在数组中。

答案 4 :(得分:-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:将$pattern = '/' . $usrID . ',?/i更改为$pattern = '/\b' . $usrID . '\b,?/i'以解决onnodb的评论......

答案 5 :(得分:-2)

简单方法(提供所有2位数字):

$string = str_replace($userId, ',', $string);
$string = str_replace(',,','', $string);