[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вытащить из длинной строки первые 3 предложения
yamarsel4ik
Допустим, есть строка


$str='
Давай дружить! Более обманчивой и поганой фразы от девушки «до секса» трудно придумать.<br /><br />Дружба – это бескорыстные личные взаимоотношения между людьми, основанные на любви, доверии, искренности, взаимных симпатиях, общих интересах и увлечениях. И что здесь общего с дружбой, предлагаемой девушкой?!<br /><br />Дружба должна быть на чём-то основана. Чтобы понять на чём, необходимо с девушкой переспать. В противном случае задние мысли о сексе будут постоянно мешать вам, определить основу вашей дружбы, а отсутствие искренности и доверия убьют её в самом зачатке.<br /><br />Поэтому, после слов девушки «давай останемся друзьями», ты должен ответить «давай» и тут же завалить её. Если она начнёт отчаянно сопротивляться и уверять «Ты меня не так понял», спроси, чего она хочет. Если она скажет, что ещё не готова к сексу с тобой, то подготовь – и заваливай.
'
;



Необходимо выдернуть начало данного текста, чтобы длина новой строки была не больше $length и не меньше $min и при этом предложение не обрезалось, а доходило до точки.

Это мне необходимо, чтобы на сайте реализовать вывод списка материалов с предварительным просмотром.
FatCat
Цитата (yamarsel4ik @ 26.03.2013 - 17:27)
Необходимо выдернуть начало данного текста, чтобы длина новой строки была не больше $length и не меньше $min

А если первое же предложение будет длиннее чем $length?

_____________
Бесплатному сыру в дырки не заглядывают...
yamarsel4ik
Цитата (FatCat @ 26.03.2013 - 19:36)
Цитата (yamarsel4ik @ 26.03.2013 - 17:27)
Необходимо выдернуть начало данного текста, чтобы длина новой строки была не больше $length и не меньше $min

А если первое же предложение будет длиннее чем $length?

Согласен, тогда максимальную длину убираем. Используем только минимальную длину
yamarsel4ik
Вот мой вариант

function preview($str,$min){
$pos=0;
$pos1=0;
while ($pos<=$min){
$pos = strpos($str,'.',$pos1);
$pos1 = $pos+1;
}
return substr($str,0,$pos+1);
}
Игорь_Vasinsky
Говнокласс обрезки текста

$text = 'В поле ID необходимо ввести комбинацию цифр (ID клиента), которая была выслана. Вам на указанный Вами адрес электронной почты.
Пароль: В поле Пароль необходимо указать тот пароль, который Вы указали при регистрации.Код с картинки: Введите в соответствующем поле цифры, изображенные на картинке. Это необходимо для защиты от роботов.'
;

class getText{
public $string;
public $minLenght;
public $maxLenght;

public function __constructor($minLenght, $maxLenght){
$this->minLenght = $minLenght;
$this->maxLenght = $maxLenght;
}

private function getMessage($index){
$messages = array(
'Введите минимальное число символов',
'Минимальное число должно быть целым и положительным',
'Введите максимальное число символов',
'Максимальное число должно быть целым и положительным',
'Минимальное число не может быть больше или равно максимальному'
);

return $messages[$index];
}

public function setParam($minLenght, $maxLenght){
$this->minLenght = $minLenght;
$this->maxLenght = $maxLenght;

if(!is_integer($this->minLenght))
echo $this->getMessage(0);
elseif($this->minLenght < 0)
echo $this->getMessage(1);
elseif(!is_integer($this->maxLenght))
echo $this->getMessage(2);
elseif($this->maxLenght < 0)
echo $this->getMessage(3);
elseif($this->minLenght >= $this->maxLenght)
echo $this->getMessage(4);
else
return
array(
'min'=>$this->minLenght,
'max'=>$this->maxLenght
);



}

public function getDottes($string){
$temp = preg_split('#\.#m', $string, -1, PREG_SPLIT_NO_EMPTY);
return array(
$temp,
array_map(create_function('$v', 'return mb_strlen($v, "utf-8");'), $temp)
);

}

public function getPath($string){
$params = $this->setParam$this->minLenght, $this->maxLenght);
$i = $params['min'];
$temp = $this->getDottes($string);
$paths = $temp[0];
$counts = $temp[1];
$res = null;

foreach($counts as $k=>$v){
$i+=$v;
if($i < $params['max'])
$res .= $paths[$k];
}

return $res;
}


}


$obj = new getText;
//Если в минимальное число символов меньше символов 1го предложения - вернётся только первое предложение
$param = $obj->setParam(10,130);
$res = $obj->getPath($text);

echo $res;



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.