И моя код за думите
<?
$opis_n="Низа, от който се взема дадена част";
if(strlen($opis_n) < 119)
{
$mn=$opis_n;
}
else
{
$opis_n=substr ("$opis_n",0,120);
$pm=explode (" ",$opis_n);
$kolko=count($pm);
$mn="";
for ($i=0; $i<($kolko-1); $i++)
{
$mnenieto=$pm[$i];
$mn.=" $mnenieto";
}
}
echo "$mn... (още)";
?>
Не задавате брой на думите, а брой на символите (в примера 120) - така отрязаните части от текстовете ще бъдат почти идентични като дължина.
Как работи скрипта?
С функцията strlen(); броим символите на целия низ. Ако са по-малко от указаното (119 в случая), принтираме целия низ.
Ако са повече (else-условието), чрез substr(); вземаме от низа определения брой символи (в примера 120). Тъй като substr(); брои символи, а не думи, има голям шанс да сме отрязали последната, което е малко неприятно. За да премахнем този ефект, използваме explode(); която е функция за разделяне на низове според зададено условие.
Условието зададено тук е интервал - т.е. празното разстояние между думите.
Експлоуд връща масив, чийто елементи са думите от отрязъка. Нуждата от това усложнение ще разберете, когато погледнете обхождането на масива.
Проверяваме, колко думи-елементи в масива сме получили от отрязъка и го обхождаме като на променливата $mn добавяме допълнителна стойност чрез Оператора за конкатениране и присвояване (.=)
За да избегнем по-късно листване на отрязана дума, пропускаме последния елемент в масива.
Накрая принтираме стойността на $mn, добавяйки и многоточие и пояснението (още), което чрез анчър можете да превърнете във връзка към целия текст.