Hola,
Existe una función en PHP llamada str_word_count que te puede servir para hacer lo que quieres, mira:
<?php
function RecortaCadenas($palabras_mostrar, $cadena)
{
$palabras = str_word_count($cadena, 1);
$num_palabras = str_word_count($cadena, 0);
$parrafo="";
if($num_palabras > $palabras_mostrar)
{
for ($i=0; $i<=$palabras_mostrar; $i++)
{
$parrafo .= $palabras[$i]." ";
}
return $parrafo;
}
else
{
return $cadena;
}
}
?>
El 0 y el 1 de la función citada anteriormente, sirven para modificar el formato de la salida de la función, con el 0 devuelve el numero de palabras, con el 1 una matriz con todas las palabras de la cadena. Existe un tercer tipo de formato (numero 2) que consiste en un vector bidimensional donde el primer valor es la posición de la palabra en la cadena y el segundo la misma palabra.
El resto del código supongo que lo entenderás.
Salu2