Если вы ищете более гибкий подход (например, для телефонных номеров), попробуйте регулярные выражения:
preg_replace('/^(\d{4})(\d{4})(\d{4})(\d{4})$/', '\1-\2-\3-\4', '0123456789012345');
Если вы не видите, первый аргумент принимает четыре группы по четыре цифры в каждой. Второй аргумент форматирует их, а третий аргумент - ваш ввод.