我有$string
包含1,9,56,566
,使用str_replace()
我可以删除该字符串中的数字,但如果我删除56
,则{{1} }将包含$string
,如果我删除1,9,,566
,则1
将$string
代替,等等。
那么我怎样才能确保无论我删除的是什么数字,在开头或结尾都没有逗号,并且数字之间连续不会超过1个逗号?
,9,56,566
答案 0 :(得分:4)
您可以替换字符串中的数字,将字符串分解为数组,然后再次内爆它而忽略空数组项。如下面的代码示例。
<?php
function filterFunction($var) {
if($var == "0" || $var != "") { return true; }
}
$string = "1,0,9,56,566";
$numberToRemove = 9;
$result = str_replace($numberToRemove, '', $string);
$resultarray = explode(",",$result);
$result = implode(",",array_filter($resultarray, "filterFunction"));
echo $result;
?>
编辑:添加了回调函数以允许0以及
下的Andy更正答案 1 :(得分:2)
如果您想要使用更长的字符串并且可能包含更多数字,那么您需要考虑连续存在多个逗号的可能性(不止一个或两个)。
此外,如果您要替换的号码发生在另一个号码内(例如56在'566内),会发生什么?我的片段不考虑这一点,但值得清楚。
<?php
$numbers = ',,,1,56,0,32,9,56,566';
$numberToRemove = 56;
$removed = str_replace($numberToRemove, '', $numbers);
$kaPow = explode(',', $removed);
$kaPow = array_filter( $kaPow, 'strlen' );
echo implode(',', $kaPow);
答案 2 :(得分:1)
使用preg_replace
代替同时删除逗号。
$string = preg_replace("/(^{$numberToRemove},|,{$numberToRemove}\b)/", '', $string);
在模式中,^{$numberToRemove},
匹配字符串开头的数字和尾随逗号,,{$numberToRemove}\b
匹配字符串中间或末尾的前导逗号和数字。
如果您要将数组转换用作解决方案的一部分,最好在进行替换之前将字符串转换为数组,并从数组中删除数字而不是使用{ {1}}并尝试处理剩余的逗号。
str_replace
答案 3 :(得分:1)
trim(preg_replace('/,,+/', ',', ',1,,9,56,,,,,566,'),',')
作为最终调整 - &gt;它处理前导和尾随逗号以及多个逗号。
但是,在进行替换时,您必须考虑在字符串中使用相同数字的可能性。在你的例子中它将是56.
使用str_replace for 56,结果为1,9,,6
。我猜想所需的结果是1,9,,566
。如果是这种情况,您可能需要再次使用preg_replace:preg_replace('/(^|,)56(,|$)/', ',', '1,9,56,566')
。只有当它用逗号括起或者在字符串的开头/结尾时才会删除它。
为清楚起见,我们一步一步来做:
$starting_string = '1,9,56,566';
$number_to_remove = '56';
$result = preg_replace('/(^|,)'.$number_to_remove.'(,|$)/', ',', $starting_string);
$result = preg_replace('/,,+/', ',', $result);
$result = trim($result, ',');
答案 4 :(得分:1)
在numberToRemove中添加逗号,在搜索字符串中附加逗号,然后修剪任何尾随逗号。如果你从值字符串之间的一个干净的逗号开始,你应该结束相同的。
$result = trim(str_replace($numberToRemove.',', '', $string.','), ',');
答案 5 :(得分:0)
删除您的号码 然后ltrim http://php.net/manual/fr/function.ltrim.php 然后str_replace',,'by','
答案 6 :(得分:0)
这只是一个非常简单的字符串替换,不使用应根据您的问题捕获每个场景的数组函数。
//this will remove the number with left comma
$numberwithleftcommaToRemove=",".$numberToRemove;
$result = str_replace($numberwithleftcommaToRemove, '', $string);
//if there was no left comma, this will remove the number with right comma
$numberwithrightcommaToRemove=$numberToRemove.",";
$result = str_replace($numberwithrightcommaToRemove, '', $string);