Put dash between every third character

softboxkid picture softboxkid · Dec 8, 2011 · Viewed 15.5k times · Source

I had a problem on how to put dash in every 3rd character. For example, I want

ABCDEF turn into ABC-DEF

I have this code:

$string = 'ABCDEF';
echo substr_replace(chunk_split($string,3),'-','3','2');
// the output is ABC-DEF

However this code does not work if I add more characters to the $string variable such as ABCDEFGHI. If I use the above code, the output will be:

ABC-DEF GHI

Answer

Jon Newmuis picture Jon Newmuis · Dec 8, 2011

You should use PHP's str_split and implode functions.

function hyphenate($str) {
    return implode("-", str_split($str, 3));
}

echo hyphenate("ABCDEF");       // prints ABC-DEF
echo hyphenate("ABCDEFGHI");    // prints ABC-DEF-GHI
echo hyphenate("ABCDEFGHIJKL"); // prints ABC-DEF-GHI-JKL

See http://ideone.com/z7epZ for a working sample of this.