Вот что у меня получилось, через разницу между числами и количеством пройденных элементов
$myArray = Array(1,2,3,4,6,7,8,10,11,13,14,15,17,19);
$num = current($myArray);
$difference = $elements = 0;
$result = Array();
foreach ($myArray as $k=>$v) {
$prev = $k>0 ? $myArray[$k-1] : 0;
$difference += $v - $prev;
$elements++;
if ($difference > $elements) {
$result[] = $num . ($elements>1 && $prev ? '-' . $prev : '');
$num = $v;
$difference = $elements = 0;
}
}
// также добавить последний элемент или разницу между ним и последним запомненным
$result[] = $num . ($elements>1 && $v ? '-' . $v : '');
echo implode(',', $result);