我到处搜索但找不到适合我的解决方案。
我有以下内容:
$bedroom_array = array($studio, $one_bed, $two_bed, $three_bed, $four_bed);
对于这个例子,我们可以说:
$studio = '1';
$one_bed = '3';
$two_bed = '3';
然后我使用implode函数在所有值之间加上逗号:
$bedroom_list = implode(", ", array_filter($bedroom_array));
echo $bedroom_list;
然后输出:
1,2,3
我想要做的是找到字符串中的最后一个逗号并将其替换为&,所以它会读取:
1,2& 3
字符串并不总是这么长,它可以更短或更长,例如1,2,3,4等。我已经研究过使用substr但是我不确定这是否适用于我需要的东西?
答案 0 :(得分:27)
弹出最后一个元素,将其余元素一起内爆,然后将最后一个元素重新打开。
$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;
如有必要,将&
转换为实体&
。
答案 1 :(得分:5)
如果你有逗号分隔的单词列表,你可以使用:
$keyword = "hello, sadasd, sdfgdsfg,sadfsdafsfd, ssdf, sdgdfg";
$keyword = preg_replace('/,([^,]*)$/', ' & \1', $keyword);
echo $keyword;
它会输出: 你好,sadasd,sdfgdsfg,sadfsdafsfd,ssdf& sdgdfg
答案 2 :(得分:1)
单行替代方案,适用于任何大小的数组($ b = $ bedroom_array):
echo count($b) <= 1 ? reset($b) : join(', ', array_slice($b, 0, -1)) . " & " . end($b);
答案 3 :(得分:1)
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)');
答案 4 :(得分:0)
$bedroom_list = implode(", ", array_filter($bedroom_array));
$vars = $bedroom_list;
$last = strrchr($vars,",");
$last_ = str_replace(",","&",$last);
echo str_replace("$last","$last_",$vars);
答案 5 :(得分:0)
<?php
$string = "3, 4, 5";
echo $string = preg_replace('/,( \d)$/', ' &\1', $string);
?>
答案 6 :(得分:0)
strrpos查找指定字符串的最后一次出现。 $ str ='1,2,3';
$index = strrpos( $str, ',' );
if( $index !== FALSE )
$str[ $index ] = '&';
答案 7 :(得分:0)
这是另一种使用正向前瞻的正则表达式进行替换的方法,不需要反向引用:
$bedroom_list = preg_replace('/,(?=[^,]*$)/',' &', implode(', ', $bedroom_array));