Очевидно же, что нужно делать конкатенацию каждого текущего элемента с предыдущим.
$str = 'test.tests.testst.tesrtcefdg.teestcvxv';
$arr = explode('.', $str);
for ($i=1; $i<count($arr); $i++) {
$arr[$i] = $arr[$i-1].'.'.$arr[$i];
}
Можно рекурсивно запилить, если разнообразия в жизни не хватает. Но в PHP это недостаточно компактно выходит:
$str = 'test.tests.testst.tesrtcefdg.teestcvxv';
function toArray($str, $arr=[]) {
$pos = strripos($str, '.');
if ($pos === False) {
array_unshift($arr, $str);
return $arr;
}
array_unshift($arr, $str);
return toArray(substr($str, 0, $pos), $arr);
}
print_r(toArray($str));