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

10

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

示例:

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

但这将替换整个最后一个单词(在此示例中为 Microsoft),包括该字符串中的最后一个逗号。我该如何仅删除最后一个逗号,并用 " and " 替换它?
我需要使用函数 strrchr() 来解决此问题。这就是为什么这个问题不是重复问题且更为具体的原因。

2
可能是PHP Replace Last Occurence of a String in a String?的重复问题。 - Thamilhan
1
我看到了那个问题。我需要使用 strrchr 来解决它。 - AlexioVay
@Thamilhan 在报告所有内容都是重复之前,你应该先阅读问题。 - AlexioVay
4个回答

13

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

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

strrpos函数找到最后一个逗号的位置,然后substr_replace函数将所需字符串放在该位置,并在此情况下替换1个字符。


如果 $likes='Apple',这个函数会返回 'andpple'。 - Alberto Suárez

5
你可以使用正则表达式来查找字符串中最后一个逗号。 PHP的preg_replace()函数可以通过正则表达式模式将一个字符串替换为另一个字符串。
$likes = 'Apple, Samsung, Microsoft';
$likes = preg_replace("/,([^,]+)$/", " and $1", $likes)

请在演示中查看结果。


1
你也可以使用 preg_replace('/,(?=[^,]*$)/',' and', $likes); - But those new buttons though..

4

请使用函数strrchr()提供答案。

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

因为 strrchr() 将会

返回字符串的一部分。

请参阅此处的文档

所以我们只需要替换逗号符号就可以了。而且当你使用 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 是数组。 - jitendrapurohit
我们可以使用以下代码来处理没有逗号的输入错误:if($last) {$likes = implode(",", $likes_arr) . " 和" . $last; echo $likes; //"A, B 和 C";} - Rajesh Baskaran
1
@RajeshBaskaran 不是那样,因为对于输入的"A",$likes_arr变成了["A"],所以$last将是"A",这将被评估为true。 - Franz Gleichmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接