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;

次のように出力されます: hello, 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
<?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 = 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 に答える