Php 将最后一个逗号替换为&;签名

Php 将最后一个逗号替换为&;签名,php,substr,implode,array-filter,Php,Substr,Implode,Array Filter,我到处都找了,但找不到适合我的解决方案 我有以下资料: $bedroom_array = array($studio, $one_bed, $two_bed, $three_bed, $four_bed); 对于此示例,让我们假设: $studio = '1'; $one_bed = '3'; $two_bed = '3'; 然后,我使用内爆函数在所有值之间加一个逗号: $bedroom_list = implode(", ", array_filter($bedroom_array));

我到处都找了,但找不到适合我的解决方案

我有以下资料:

$bedroom_array = array($studio, $one_bed, $two_bed, $three_bed, $four_bed);
对于此示例,让我们假设:

$studio = '1';
$one_bed = '3';
$two_bed = '3';
然后,我使用内爆函数在所有值之间加一个逗号:

$bedroom_list = implode(", ", array_filter($bedroom_array));
echo $bedroom_list;
然后输出:

1,2,3

我要做的是找到字符串中的最后一个逗号,并将其替换为&,这样它将显示:

1、2和3


字符串并不总是这么长,它可以更短或更长,例如1、2、3、4等等。我已经研究过使用substr,但不确定这是否能满足我的需要?

弹出最后一个元素,将其余元素一起内爆,然后再将最后一个元素粘上

$bedroom_array = array('studio', 'one_bed', 'two_bed', 'three_bed', 'four_bed');
$last = array_pop($bedroom_array);
$string = count($bedroom_array) ? implode(", ", $bedroom_array) . " & " . $last : $last;
&
转换为实体
&如有必要。


$bedroom_list = implode(", ", array_filter($bedroom_array));

$vars =  $bedroom_list;

$last = strrchr($vars,",");

$last_ = str_replace(",","&",$last);

echo str_replace("$last","$last_",$vars);

一种单行程序替代方案,适用于任何大小的阵列($b=$U阵列):

echo count($b)查找指定字符串的最后一次出现。
$str='1,2,3'

$index = strrpos( $str, ',' ); 
if( $index !== FALSE )
    $str[ $index ] = '&'; 

如果您有逗号分隔的单词列表,您可以使用:


$keyword=“您好,sadasd,sdfgdsfg,SADFSDFSFD,ssdf,sdgdfg”
$keyword=preg_replace('/,([^,]*)$/,'&\1',$keyword)
echo$关键字;

它将输出: 您好,sadasd、sdfgdsfg、sadfsdafsfd、ssdf和sdgdfg

function fancy_implode($arr){
    array_push($arr, implode(' and ', array_splice($arr, -2)));
    return implode(', ', $arr);
}
我觉得这更容易阅读/理解和使用

  • 不修改原始数组
  • 不使用正则表达式,因为如果数组中的字符串包含逗号,这些表达式可能会失败,这可能是一个有效的原因,类似这样:
    array('Shirts(S,M,L)','Pants(72 x 37,72 x 39)'
  • 分隔符的长度不必与其他一些解决方案的长度相同

下面是另一种使用正向前瞻(不需要反向引用)替换正则表达式的方法:

$bedroom_list = preg_replace('/,(?=[^,]*$)/',' &', implode(', ', $bedroom_array));

我在这里回答了同样的问题:可能重复的I'd change
$string=introde(“,”,$dombery\u数组)。" & " . $最后
$string=count($dombery\u数组)?内爆(“,”,$U数组)。" & " . $最后:$最后
以涵盖在pop之前数组中只有一个元素的情况。另外,如果这只是直接进入浏览器,请使用
“&;”而不是
”&“
。这里是一个函数版本,有一点错误检查:感谢您的帮助!我尝试使用Micheals的想法,但遇到了一些麻烦,因为数组中的变量并不总是设置好的——因此使用了数组\过滤器。我得到了&working,但它仍然会显示最后一个数组,我将得到1、2和2,而不是1和2。最后,我使用了Brads代码,工作起来就像做梦一样!不过,我仍然对其他方法感兴趣!
function fancy_implode($arr){
    array_push($arr, implode(' and ', array_splice($arr, -2)));
    return implode(', ', $arr);
}
$bedroom_list = preg_replace('/,(?=[^,]*$)/',' &', implode(', ', $bedroom_array));