如何确保没有过多的逗号

时间:2017-04-10 15:38:42

标签: php string

我有$string包含1,9,56,566,使用str_replace()我可以删除该字符串中的数字,但如果我删除56,则{{1} }将包含$string,如果我删除1,9,,566,则1$string代替,等等。

那么我怎样才能确保无论我删除的是什么数字,在开头或结尾都没有逗号,并且数字之间连续不会超过1个逗号?

,9,56,566

7 个答案:

答案 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内),会发生什么?我的片段不考虑这一点,但值得清楚。

https://3v4l.org/pOP0p

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