5

我到处搜索,但找不到适合我的解决方案。

我有以下内容:

$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 ,但不确定这是否能满足我的需要?

4

8 回答 8

31

弹出最后一个元素,将其余元素内爆在一起,然后重新粘贴最后一个元素。

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

必要时转换&为实体。&

于 2011-10-07T13:07:06.270 回答
6

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

$keyword = "hello, sadasd, sdfgdsfg,sadfsdafsfd, ssdf, sdgdfg";
$keyword = preg_replace('/,([^,]*)$/', ' & \1', $keyword);
echo $keyword;

它将输出:你好,sadasd,sdfgdsfg,sadfsdafsfd,ssdf & sdgdfg

于 2012-10-16T10:07:43.417 回答
2

一种单线替代方案,适用于任何大小的数组 ($b = $bedroom_array):

echo count($b) <= 1 ? reset($b) : join(', ', array_slice($b, 0, -1)) . " & " . end($b); 
于 2011-10-07T13:19:25.217 回答
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)');
  • 定界符不必与其他一些解决方案具有相同的长度
于 2013-11-23T18:22:00.690 回答
0
$bedroom_list = implode(", ", array_filter($bedroom_array));

$vars =  $bedroom_list;

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

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

echo str_replace("$last","$last_",$vars);
于 2011-10-07T13:13:36.547 回答
0
<?php
$string = "3, 4, 5";
echo $string = preg_replace('/,( \d)$/', ' &\1', $string);
?>
于 2011-10-07T13:15:58.983 回答
0

strrpos查找指定字符串的最后一次出现。$str = '1, 2, 3';

$index = strrpos( $str, ',' ); 
if( $index !== FALSE )
    $str[ $index ] = '&'; 
于 2011-10-07T13:20:32.113 回答
0

这是另一种使用不需要反向引用的正向前瞻用正则表达式进行替换的方法:

$bedroom_list = preg_replace('/,(?=[^,]*$)/',' &', implode(', ', $bedroom_array));
于 2020-09-18T15:48:24.513 回答