У меня есть массив ( $number_list
), который имеет динамически сгенерированный список значений. В массиве будет не менее 1 значения и не более 4.
В настоящее время у меня есть хороший способ иметь список, разделенный запятыми, используя это …
$comma_list = implode(', ', $number_list);
Тем не менее, я хотел бы придерживаться английской конвенции и иметь слово «и» до последнего элемента. Итак, предположим, что $ number_list содержит значения 4, 5, 6, 7. Я хотел бы повторить утверждение типа «Список 4, 5, 6 и 7.»
Любые идеи, как получить это и там?
Попробуйте array_pop()
чтобы получить последний элемент, а затем array_push
чтобы изменить и отодвинуть элемент назад:
http://php.net/manual/en/function.array-pop.php
Что-то вроде
$last_element = array_pop($number_list); array_push($number_list, 'and '.$last_element);
Затем вы можете сделать свой взлом:
$comma_list = implode(', ', $number_list);
Удалите последний элемент из списка, вставьте его в запятую, а затем соедините «и last_element»:
$last = array_pop($number_list); $output = implode(', ', $number_list); if ($output) { $output .= ', and '; } $output .= $last;
Если вы предпочитаете, вы также можете написать выше
$last = array_pop($number_list); $output = $number_list ? implode(', ', $number_list).', and '.$last : $last;
Обновить:
Должен признать, что я изначально неправильно понял вопрос и подумал, что речь идет о замене последней запятой на «и», а не на добавлении «и» до конечного элемента. С тех пор я отредактировал ответ на целевой сценарий. Обратите внимание, что код можно легко адаптировать, либо выбрав " and "
или ", and "
для строки «клей» соответственно.
$number_list = array(4, 5, 6, 7); $comma_list = strrev(implode(strrev(', and'), explode(strrev(','), strrev(implode(', ', $number_list)), 2))); echo 'The list is ' . $comma_list . '.';
Выход: список 4, 5, 6 и 7.
# pop the last element off the array and formate text if( count( $number_list )>1 ){ $and = " and ".array_pop( $number_list ); }else{ $and = ''; } # Implode number list , and append $and $comma_list = implode(', ', $number_list).$and;
strrpos
<?php $number_list= Array(1,2,3,4,5); $comma_list = implode(', ', $number_list); $comma_list = substr($comma_list,0,strrpos($comma_list,',')).' And'.substr($comma_list,strrpos($comma_list,',')+1); echo $comma_list; //returns 1, 2, 3, 4 And 5 ?>
Если в конце списка есть как минимум два элемента, вы можете их развязать с помощью " and "
(или если ваш вопрос не был встречен ", and "
).
Затем вы ввели весь массив с помощью ", "
.
Пример:
<?php $numbers = range(1, 4); array_splice($numbers, -2, 2, implode(' and ', array_slice($numbers, -2))); echo implode(', ', $numbers); prints "1, 2, 3 and 4"
Демо: https://eval.in/45277