2by*_*2by 6 php string function
我想将我的字符串截断/缩短到最接近ceratain字符数的句子.
我有一个工作函数,但我的函数截断到最接近certaion数字的单词.
function shortenString($string, $your_desired_width) {
$parts = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
$parts_count = count($parts);
$length = 0;
$last_part = 0;
for (; $last_part < $parts_count; ++$last_part) {
$length += strlen($parts[$last_part]);
if ($length > $your_desired_width) { break; }
}
return implode(array_slice($parts, 0, $last_part));
}
Run Code Online (Sandbox Code Playgroud)
例如:
Lorem ipsum dolor坐下来,精致的adipistur elit.整数malesuada eleifend orci,eget dignissim ligula porttitor cursus.在blandit enim中的Praesent.Maecenas简历eleifend est.Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus.Maecenas pulvinar gravida tempor.
应缩短为:
Lorem ipsum dolor坐下来,精致的adipistur elit.整数malesuada eleifend orci,eget dignissim ligula porttitor cursus.
而不是像这样打破句子:
Lorem ipsum dolor坐下来,精致的adipistur elit.整数malesuada eleifend orci,eget dignissim ligula porttitor cursus. Praesent in
感谢帮助.
我尝试了几个函数和正则表达式,但没有一个像我希望的那样工作,所以我创建了这个:
function sentenceTrim($string, $maxLength = 300) {
$string = preg_replace('/\s+/', ' ', trim($string)); // Replace new lines (optional)
if (mb_strlen($string) >= $maxLength) {
$string = mb_substr($string, 0, $maxLength);
$puncs = array('. ', '! ', '? '); // Possible endings of sentence
$maxPos = 0;
foreach ($puncs as $punc) {
$pos = mb_strrpos($string, $punc);
if ($pos && $pos > $maxPos) {
$maxPos = $pos;
}
}
if ($maxPos) {
return mb_substr($string, 0, $maxPos + 1);
}
return rtrim($string) . '…';
} else {
return $string;
}
}
Run Code Online (Sandbox Code Playgroud)
它将字符串修剪为指定的最大长度,从该字符串中找到最后一个句子的结尾(. 或 ! 或 ?)的最后一次出现,并再次修剪到此出现。它返回一个或几个接近指定字符数的完整句子。
请纠正我的英语。
这就是我想出的……您应该检查句子是否比您要查找的 len 长……以及 g13n 所说的其他内容。如果句子太短/太长而不能将其剪掉并加上“...”可能会更好。另外,您必须检查/转换空格,因为 strrpos 只会查找给定的内容。
$maxlen = 150;
$file = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus. Praesent in blandit enim. Maecenas vitae eleifend est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas pulvinar gravida tempor.";
if ( strlen($file) > $maxlen ){
$file = substr($file,0,strrpos($file,". ",$maxlen-strlen($file))+1);
}
Run Code Online (Sandbox Code Playgroud)
如果你想使用你拥有的相同功能,你可以试试这个:
function shortenString($string, $your_desired_width) {
$parts = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
$parts_count = count($parts);
$length = 0;
$last_part = 0;
$last_taken = 0;
foreach($parts as $part){
$length += strlen($part);
if ( $length > $your_desired_width ){
break;
}
++$last_part;
if ( $part[strlen($part)-1] == '.' ){
$last_taken = $last_part;
}
}
return implode(array_slice($parts, 0, $last_taken));
}
Run Code Online (Sandbox Code Playgroud)