Замените последнюю запятую знаком & - PullRequest
5 голосов
/ 07 октября 2011

Я искал везде, но не могу найти решение, которое работает для меня.

У меня есть следующее:

$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, но не уверен, что это будет работать для того, что мне нужно?

Ответы [ 7 ]

27 голосов
/ 07 октября 2011

Снимите последний элемент, сложите остальные вместе, затем прикрепите последний обратно.

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

Преобразуйте & в сущность &, если необходимо.

5 голосов
/ 16 октября 2012

если у вас есть список слов через запятую, который вы можете использовать:

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

будет выводиться: привет, sadasd, sdfgdsfg, sadfsdafsfd, ssdf & sdgdfg

1 голос
/ 23 ноября 2013
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)');
  • Ограничители не обязательно должны быть такой же длины, как в некоторых других решениях
1 голос
/ 07 октября 2011

Однострочная альтернатива, которая будет работать для массива любого размера ($ b = $ Bedroom_array):

echo count($b) <= 1 ? reset($b) : join(', ', array_slice($b, 0, -1)) . " & " . end($b); 
0 голосов
/ 07 октября 2011

strrpos находит последнее вхождение указанной строки. $ str = '1, 2, 3';

$index = strrpos( $str, ',' ); 
if( $index !== FALSE )
    $str[ $index ] = '&'; 
0 голосов
/ 07 октября 2011
<?php
$string = "3, 4, 5";
echo $string = preg_replace('/,( \d)$/', ' &\1', $string);
?>
0 голосов
/ 07 октября 2011
$bedroom_list = implode(", ", array_filter($bedroom_array));

$vars =  $bedroom_list;

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

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

echo str_replace("$last","$last_",$vars);
...