Php 如何确保没有多余的逗号

Php 如何确保没有多余的逗号,php,string,Php,String,我有一个$string包含1,9,56566,通过使用str_replace()我可以从该字符串中删除一个数字,但是如果我删除例如56,那么$string将包含1,9,566,如果我删除1,那么$string将是,9,56566取而代之,以此类推 那么,我如何才能确保无论删除哪个数字,在开始或结束时都不会有逗号,并且数字之间的一行中也不会有超过1个逗号 $result = str_replace($numberToRemove, '', $string); 删除你的号码 然后是ltrim 然后

我有一个
$string
包含
1,9,56566
,通过使用
str_replace()
我可以从该字符串中删除一个数字,但是如果我删除例如
56
,那么
$string
将包含
1,9,566
,如果我删除
1
,那么
$string
将是
,9,56566
取而代之,以此类推

那么,我如何才能确保无论删除哪个数字,在开始或结束时都不会有逗号,并且数字之间的一行中也不会有超过1个逗号

$result = str_replace($numberToRemove, '', $string);
删除你的号码 然后是ltrim
然后str_replace“,”by“,”

这只是一个非常简单的字符串替换,不使用数组函数,它应该根据您的问题捕获每个场景

//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);

您可以替换字符串中的数字,将字符串分解为数组,然后再次内爆,忽略空数组项。如下面的代码示例所示

<?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;

?>


编辑:添加回调函数,允许安迪在下面的

>P>中改正0。如果你想用更长的字符串来做这件事,其中可能有更多的数字,那么你就要考虑一个行中有几个逗号的可能性(不止一个或两个)。 另外,如果您要替换的号码出现在另一个号码内(例如56是“inside”566),会发生什么情况?我的片断没有考虑,但是值得弄清楚。


使用
preg\u replace
同时删除逗号

$string = preg_replace("/(^{$numberToRemove},|,{$numberToRemove}\b)/", '', $string);

在模式中,<代码> ^ {$NUBRATEMOVE},匹配字符串开头的序号和尾逗号,并且<代码> {$MultReMeMeVo} \ b>代码>匹配字符串的中间或结尾处的逗号和数字。


如果要将数组转换作为解决方案的一部分,那么最好在替换之前将字符串转换为数组,并从数组中删除数字,而不是使用
stru\u replace
并尝试处理剩余的逗号

$numbers = explode(',', $string);

array_filter($numbers, function ($n) use ($numberToRemove) {
    return $n != $numberToRemove;
});

$string = implode(',', $numbers);
trim(preg_replace(“/,+/,”,“,”,1,9,56,,,,,,,,,,,,”),“,”)
作为最终调整->它负责前导和尾随逗号以及多个逗号

但是,在进行替换时,您必须考虑字符串中有相同数字的可能性。在你的例子中是56

用str_替换56,结果是
1,9,6
。我猜期望的结果是
1,9,566
。如果是这种情况,您可能需要再次使用preg_replace:
preg_replace('/(^ |,)56(,|$)/',','1,9,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, ',');

将逗号附加到数字删除,将逗号附加到搜索字符串,然后修剪任何尾随逗号。如果您以一个干净的值之间的逗号字符串开始,那么最终应该是相同的

$result = trim(str_replace($numberToRemove.',', '', $string.','), ',');

$result=trim(str_replace([',',,,,,,,,,,,,,,$string),,,)去罗马的单程路。如果你像我一样使用逗号,那就行了said@OGenthe没问题;)这去掉了数字“0”,因为它的计算结果为false。从未想过566中有56。也许你比较了数字的长度,只删除了数量相同的那个?这样56就不会在566中被删除。我想你是对的,只需为数组过滤器编写一个回调代码,将元素与要删除的元素匹配,然后完全删除str_replace。由于某些原因,我无法删除字符串的最后一个数字。很抱歉。是的,我刚刚意识到我的错误。我将编辑答案。@P.Nick好的,现在应该适用于每个(开始/结束/中间)案例。
$result = trim(str_replace($numberToRemove.',', '', $string.','), ',');