Список разделенных запятыми из массива с «и» перед последним элементом

У меня есть массив ( $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