如何使用php用“and”替换字符串中的最后一个逗号?

Posted

技术标签:

【中文标题】如何使用php用“and”替换字符串中的最后一个逗号?【英文标题】:How to replace last comma in string with "and" using php? 【发布时间】:2017-06-05 09:35:25 【问题描述】:

我正在尝试使用strrchr()str_replace() 将文本中最后出现的逗号替换为“and”。

例子:

$likes = 'Apple, Samsung, Microsoft';
$likes = str_replace(strrchr($likes, ','), ' and ', $likes);

但这会替换整个最后一个单词(在本例中为 Microsoft),包括此字符串中的最后一个逗号。如何删除最后一个逗号并将其替换为 " 和 " ?

我需要使用strrchr() 作为函数来解决这个问题。这就是为什么这个问题没有重复并且更具体的原因。

【问题讨论】:

php Replace Last Occurence of a String in a String?的可能重复 我看到了这个问题。我需要使用strrchr 来解决这个问题。 【参考方案1】:

首先,您必须将元素分成一个数组,其中包含除最后一个和最后一个之外的所有元素。然后你分别用逗号和一个“and”把它们放在一起

$likes = "A, B, C";
$likes_arr = explode(",", $likes);
$last = array_pop($likes_arr);
$likes = implode(",", $likes_arr) . " and" . $last;
echo $likes; //"A, B and C";

然而:不要忘记检查你是否真的有足够的元素。这对于没有逗号的输入会失败。

【讨论】:

警告:array_pop() 期望参数 1 为数组 我们可以使用 if($last) $likes = implode(",", $likes_arr) 。 “ 和” 。 $最后;回声$喜欢; //"A、B 和 C"; 表示不带逗号的输入失败 @RajeshBaskaran 没有。不是这样,因为对于输入“A”,$likes_arr 变为 ["A"],所以 $last 将是 "A",其计算结果为 true。【参考方案2】:

您可以使用正则表达式查找字符串中的最后一个逗号。 php preg_replace() 用正则表达式模式替换字符串。

$likes = 'Apple, Samsung, Microsoft';
$likes = preg_replace("/,([^,]+)$/", " and $1", $likes)

检查结果在demo

【讨论】:

你也可以preg_replace('/,(?=[^,]*$)/',' and', $likes);【参考方案3】:

要仅替换最后一次出现,我认为更好的方法是:

$likes = 'Apple, Samsung, Microsoft';
$likes = substr_replace($likes, ' and', strrpos($likes, ','), 1);

strrpos 找到最后一个逗号的位置,substr_replace 将所需的字符串放在那个位置,在这种情况下替换 '1' 字符。

【讨论】:

【参考方案4】:

只需使用函数strrchr()提供答案

$likes = 'Apple, Samsung, Microsoft';
$portion = strrchr($likes, ',');
$likes = str_replace($portion, (" and" . substr($portion, 1, -1)), $likes);

因为strrchr()

这个函数返回字符串的一部分

见Doc here

所以我们只需要替换逗号符号就可以了。当你使用strrchr()时,逗号总是第一个字符

见Demo here

【讨论】:

以上是关于如何使用php用“and”替换字符串中的最后一个逗号?的主要内容,如果未能解决你的问题,请参考以下文章

用php中的随机数字替换字符串中的奇数位置

js中如何替换掉最后一个匹配的字符串?

[PHP]算法-替换空格的PHP实现

php用一个空格替换多个空格[重复]

一个如何连接字符串类型的数组项,每个项都有一个逗号字符,除了最后一项必须用“and”连接?

PHP用数组中的值替换字符串