用&替换最后一个逗号。标志

时间:2011-10-07 13:04:01

标签: 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';

然后我使用implode函数在所有值之间加上逗号:

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

然后输出:

1,2,3

我想要做的是找到字符串中的最后一个逗号并将其替换为&,所以它会读取:

1,2& 3

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

8 个答案:

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