Last Updated: February 25, 2016
· anthonylevings

Two ways to convert an array of any length into a string with "and" before final entry in PHP


function author_array($value) {

if (is_string($value)) $author=$value;

else if (is_array($value))
while ($i<$array_length) {

// Final author
if ($array_length-$i==1) $author=$author.$value[$i];
// Penultimate author
else if ($i==$array_length-2) $author=$author.$value[$i]." and ";
// All other entries
else $author=$author.$value[$i].", ";

return $author;
echo author_array(array("Sam","Jim", "Jackie","Simon"));

The alternative is to implode the array, and then use regular expressions and string search and replace functions (preg_replace and substr_replace)


// create an array
$array = array("Sam","Jim", "Jackie","Simon");
// implode the array so we have a string of names with commas inside
$comma_separated = implode(",", $array);

// make commas the search pattern
$pattern = '/(,)/';
// make the replacement the found comma followed by a space
$replacement = '$1 ';
// use the pattern, replacement and string to place spaces inside string after commas
$comma_separated = preg_replace($pattern, $replacement, $comma_separated);

// Create a function for replacing instance of something in a string with something else or in this case borrow it from StackOverflow

function str_lreplace($search, $replace, $subject)
    $pos = strrpos($subject, $search);

    if($pos !== false) $subject = substr_replace($subject, $replace, $pos, strlen($search));

    return $subject;

// replace final comma with "and"
echo str_lreplace(","," and ",$comma_separated);