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