Intereting Posts
Как вы запускаете .bat-файл из PHP? Почему парадигма MVC лучше всего подходит для веб-приложений? Использование вектора инициализации в openssl_encrypt Избегание неоднозначных ошибок столбцов при использовании JOIN в MySQL Захват определенной части предыдущих / следующих узлов Использование регулярного выражения для соответствия блоку div, имеющему определенный идентификатор Установите фильтр по умолчанию в Twig как установить id элемента с помощью PHP dom? Сообщение Ajax из динамически созданной таблицы избегая инъекций MySQL с классом Zend_Db Как я мог реорганизовать json-массивы и дать ключевую строку каждому ключу, выстраивая их в массивы в массиве через php? Можно ли проверить, является ли объект видом определенного класса, в PHP? htaccess rewrite QueryString исчезает в Apache 2.2, но работает в версии 2.4 Проверить значение NULL в переменной, которая не может быть установлена Как найти позицию символа в строке в PHP

Замените последнюю запятую знаком &

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

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

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

Related of "Замените последнюю запятую знаком &"

Выключить последний элемент, взорвать остальные вместе, а затем снова вставить последний.

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

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

если вы разделили запятыми список слов, которые вы можете использовать:

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

он будет выводить: hello, sadasd, sdfgdsfg, sadfsdafsfd, ssdf & sdgdfg

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

 echo count($b) <= 1 ? reset($b) : join(', ', array_slice($b, 0, -1)) . " & " . end($b); 
 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)');
  • Разделители не должны иметь такую ​​же длину, как с некоторыми другими решениями
 $bedroom_list = implode(", ", array_filter($bedroom_array)); $vars = $bedroom_list; $last = strrchr($vars,","); $last_ = str_replace(",","&",$last); echo str_replace("$last","$last_",$vars); 
 <?php $string = "3, 4, 5"; echo $string = preg_replace('/,( \d)$/', ' &\1', $string); ?> 

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

 $index = strrpos( $str, ',' ); if( $index !== FALSE ) $str[ $index ] = '&';