我目前正在使用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'之后没有尾随'逗号'
我可以从字符串中删除特定数字吗?
感谢。
答案 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);