I have an array ($number_list
) that has a dynamically generated list of values. There will be at least 1 value in the array and no more than 4.
Currently, I have a nice way of having a comma separated list using this...
$comma_list = implode(', ', $number_list);
However, I'd like to keep with English convention and have the word "and" before the last element. So, let's say $number_list contains the values 4, 5, 6, 7. I would want to echo a statement like, "The list is 4, 5, 6, and 7."
Any ideas how to get that and in there?
Remove the last element from the list, implode what's left with commas and then concatenate "and last_element":
$last = array_pop($number_list);
$output = implode(', ', $number_list);
if ($output) {
$output .= ', and ';
}
$output .= $last;
If you prefer, you can also write the above more tersely as
$last = array_pop($number_list);
$output = $number_list
? implode(', ', $number_list).', and '.$last
: $last;
Update:
I have to admit I initially misread the question and thought that it was about replacing the last comma with "and", not adding an "and" before the final item. I have since edited the answer to target the latter scenario. Note that the code can be easily adapted to do either by selecting " and "
or ", and "
for the "glue" string respectively.
Try array_pop()
to get the last element, then array_push
to modify and push the element back:
http://php.net/manual/en/function.array-pop.php
Something like
$last_element = array_pop($number_list);
array_push($number_list, 'and '.$last_element);
Then you can do your implode:
$comma_list = implode(', ', $number_list);
If the list has at least two elements at the end, you can implode them with " and "
(or if your question wasn't borked ", and "
) already.
Then you implode the whole array with ", "
.
Example:
<?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"
Demo: https://3v4l.org/DHPla
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With