Php 将逗号替换为&;在字符串的最后一个单词之前

Php 将逗号替换为&;在字符串的最后一个单词之前,php,Php,在理想情况下应该是一件简单的事情上没有什么困难 我想做的是将最后一个单词前面的,“替换为& 所以基本上,如果$ddd中的单词存在,则需要将其作为&ddd使用,如果$ddd中的单词为空,则需要&CCC 从理论上讲,我需要做的是: “AAA、BBB、CCC和DDD”时,所有4个字均不为空 “AAA、BBB和CCC”,当3个不为空且最后一个为空时 “AAA&BBB”时,2个不是空的,2个最后的单词是空的 只有一个返回非空时为“AAA” 这是我的剧本 $aaa = "AAA"; $

在理想情况下应该是一件简单的事情上没有什么困难

我想做的是将最后一个单词前面的
,“
替换为
&

所以基本上,如果
$ddd
中的单词存在,则需要将其作为&ddd使用,如果
$ddd
中的单词为空,则需要
&CCC

从理论上讲,我需要做的是:

“AAA、BBB、CCC和DDD”时,所有4个字均不为空 “AAA、BBB和CCC”,当3个不为空且最后一个为空时 “AAA&BBB”时,2个不是空的,2个最后的单词是空的 只有一个返回非空时为“AAA”

这是我的剧本

    $aaa = "AAA";
    $bbb = ", BBB";
    $ccc = ", CCC";
    $ddd = ", DDD";
    $line_for = $aaa.$bbb.$ccc.$ddd;
$wordarray = explode(', ', $line_for);
if (count($wordarray) > 1 ) {
  $wordarray[count($wordarray)-1] = '& '.($wordarray[count($wordarray)-1]);
  $line_for = implode(', ', $wordarray); 
}
请不要评判我,因为这只是我试图创造的东西,我已经试图描述上面


请帮助

以下是我的看法,使用
数组\u pop()

$str=“A,B,C,D,E”;
$components=分解(“,”,$str);
如果(计数($components),这里还有另一种方法:

$str = "A, B, C, D, E";
$pos = strrpos($str, ","); //Calculate the last position of the ","

if($pos) $str = substr_replace ( $str , " & " , $pos , 1); //Replace it with "&"
// ^ This will check if the word is only of one word.
对于那些喜欢复制函数的人,这里有一个:)


基于正则表达式的解决方案:

$str = "A, B, C, D, E";

echo preg_replace('~,(?=[^,]+$)~', '&', $str);
正则表达式解释:

, -- a comma
(?=[^,]+$) -- followed by one or more any characters but `,` and the end of the string

关于断言的文档(在我的回答中使用了积极的前瞻
(?=…)
):

我认为这是最好的方法:

function replace_last($haystack, $needle, $with) {
    $pos = strrpos($haystack, $needle);
    if($pos !== FALSE)
    {
        $haystack = substr_replace($haystack, $with, $pos, strlen($needle));
    }
    return $haystack;
}
现在你可以这样使用它:

$string = "AAA, BBB, CCC, DDD, EEE";
$replaced = replace_last($string, ', ', ' & ');
echo $replaced.'<br>';
$string=“AAA、BBB、CCC、DDD、EEE”;
$replaced=replace_last($string,',','&;');
echo$已替换。“
”;
这里没有人会评判你。你的问题很好。你描述了你想要什么,你尝试过什么,以及哪里不起作用+1.你得到的变量
$aaa
$bbb
等是否真的以逗号和空格开头?还是你自己加的?我自己加的,只是举个例子really@MadaraUchiha +1? 这不是一个判断吗?在代码的开头,你有一个字符串,还是一系列包含字符串的变量?你能解释一下吗,我想理解一下。“一个在互联网上找到的函数”---当你是一名开发人员,不能编写这样一个简单的4行函数,不得不用谷歌搜索它时,这一定很令人伤心。@Starx:他只是在互联网上“找到”了你的代码并使用了它,很简单:-)除了我的是第一个,而且在你的答案中(编辑之前),如果没有逗号,它将替换字符串的开头。@core1024,可能是因为我在测试代码。你的答案真的是第一个吗??总之,我做了一个新函数,它是一个简单的两行程序。你可能会喜欢:)
function replace_last($haystack, $needle, $with) {
    $pos = strrpos($haystack, $needle);
    if($pos !== FALSE)
    {
        $haystack = substr_replace($haystack, $with, $pos, strlen($needle));
    }
    return $haystack;
}
$string = "AAA, BBB, CCC, DDD, EEE";
$replaced = replace_last($string, ', ', ' &amp; ');
echo $replaced.'<br>';