May 9, 2013

What is the best way to prepend a conjunction to the end of an imploded array in PHP?

Danronmoon’s Questions:

Let’s say I have an array.

$shopping_list = array('eggs', 'butter', 'milk', 'cereal');

What is the easiest and/or most clever way to display this as a comma-delimited list and prepend a word (conjunction, preposition, etc.) to the last value? Desired results include:

'eggs, butter, milk, and cereal'
'eggs, butter, milk, or cereal'
'eggs, butter, milk, with cereal'
'eggs, butter, milk, in cereal'
// etc.

The array will be of variable length, may be associative, and preferably it shouldn’t be modified. It needn’t be imploded either; I figure this is just the standard way of doing things like this. Array dereferencing is fine too, but something PHP 5.3-compatible would be great.

I’m thinking something along the lines of

$extra_word = 'and';

implode(', ', array_slice($shopping_list, 0, count($shopping_list) - 1)) 
    . ', ' . $extra_word . ' '
    . implode(',', array_slice($shopping_list, count($shopping_list) - 1));

But that’s a doozy. Loops are cleaner and slightly less inept:

$i = 0;
$output = '';

foreach ($shopping_list as $item) {
   $i += 1;
   if ($i > 1) {
       $output .= ', ';
       if ($i === count($shopping_list)) {
           $output .= $extra_word . ' ';
       }
   }

   $output .= $item;
}

Both of these ways seem roundabout. Is there a better way out there that comes to mind?

This is cleaner too.

$pop = array_pop($shopping_list);
echo implode(", ", $shopping_list)." and $pop.";

Author: Nabin Nepal (Starx)

Hello, I am Nabin Nepal and you can call me Starx. This is my blog where write about my life and my involvements. I am a Software Developer, A Cyclist and a Realist. I hope you will find my blog interesting. Follow me on Google+

...

Please fill the form - I will response as fast as I can!