limite string para as primeiras 5 palavras ou primeiros 42 caracteres em PHP

Se eu tenho uma string no PHP que é muito longa string no PHP e eu quero encurtá-lo e, em seguida, acrescentar algo a ele.

Eu quero encurtá-lo para as primeiras 6 palavras ou 42 caracteres, o que for mais curto e, em seguida, acrescentar um '...' a ele, se foi encurtado.

O único caso não seria encurtado e o '...' não adicionado seria se tivesse originalmente menos de 6 palavras ou 42 caracteres.

Como posso fazer isso em PHP?

Logicamente, eu acho que dividiria a string pelo espaço em branco e então adicionaria cada coisa antes do espaço em branco em uma matriz e pegaria apenas os 6 primeiros elementos dessa matriz e os gravaria em uma nova string.

Aqui está o código que tenho até agora:

str_1 = 'The quick brown fox jumped over the lazy dog';
$words = explode(" ", $str_1);
$counter = 0;
str_2 = '';
foreach($words as $word){
    if($counter < 5){
        //append $words[counter] to str_2;
        counter++;
    }
    else{
        break;
    }
}

Eu não sei como fazer o resto para contagem de caracteres ou comparação ou anexação.

Alguém tem alguma idéia?