如何将PHP中的字符串截断为最接近一定数量字符的句子? [英] How to truncate a string in PHP to the sentence closest to a certain number of characters?

查看:54
本文介绍了如何将PHP中的字符串截断为最接近一定数量字符的句子?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想截断/缩短我的字符串到最接近某些字符的句子.

I want to truncate/shorten my string to the sentence closest to a ceratain number of characters.

我有一个有效的函数,但是我的函数截断到了最接近某个字符数的单词.

I have a working function, but my function truncate to the word closest to a certaion number of characters instead.

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));
}

例如:

Lorem ipsum dolor坐着,安全奉献精英.整数 malesuada eleifend orci,得到dignissim ligula porttitor cursus. 在blandit enim中享有盛誉. Maecenas vitae eleifend est.Cum sociis 纳托克·彭纳蒂布斯和马格尼斯·德·蒙图斯·蒙蒂斯 亩. Maecenas pulvinar gravida tempor.

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.

应缩短为:

Lorem ipsum dolor坐着,安全奉献精英.整数 malesuada eleifend orci,edig dignissim ligula porttitor cursus.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus.

与其像这样打破句子:

Lorem ipsum dolor坐着,安全奉献精英.整数 malesuada eleifend orci,得到dignissim ligula porttitor cursus. 原因

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus. Praesent in

感谢您的帮助.

推荐答案

这是我想出的...您应该检查该句子是否比您要查​​找的len长..除其他外,例如g13n说.如果句子太短/太长而无法将其砍掉并放入"...",则可能会更好.另外,由于strrpos只会查找给出的内容,因此您必须检查/转换空格.

This is what I came up with... you should check if the sentence is longer than the len you are looking for.. among other things like what g13n said. It might be better if the sentence is too short/long to chopping it off and putting "...". Plus, you would have to check/convert whitespace since strrpos will only look for what is given.

$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);
}

如果要使用相同的功能,可以尝试以下操作:

if you want to use the same function you have, you can try this:

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));
}

这篇关于如何将PHP中的字符串截断为最接近一定数量字符的句子?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆