加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 截断字符串,但删除字符串的中间而不是结束

发布时间:2020-12-13 13:47:13 所属栏目:PHP教程 来源:网络整理
导读:我想出了这个函数,它将给定的字符串截断为给定的字数或给定的字符数,无论是更短的字符. 然后,在字符数或字数限制之后切断所有内容后,它会在字符串后附加一个“…”. 如何从字符串中间删除字符/单词并用’…’替换它们而不是用’…’替换末尾的字符/单词? 这
我想出了这个函数,它将给定的字符串截断为给定的字数或给定的字符数,无论是更短的字符.
然后,在字符数或字数限制之后切断所有内容后,它会在字符串后附加一个“…”.

如何从字符串中间删除字符/单词并用’…’替换它们而不是用’…’替换末尾的字符/单词?

这是我的代码:

function truncate($input,$maxWords,$maxChars){
    $words = preg_split('/s+/',$input);
    $words = array_slice($words,$maxWords);
    $words = array_reverse($words);

    $chars = 0;
    $truncated = array();

    while(count($words) > 0)
    {
        $fragment = trim(array_pop($words));
        $chars += strlen($fragment);

        if($chars > $maxChars){
            if(!$truncated){
                $truncated[]=substr($fragment,$maxChars - $chars);
            }
            break;
        }

        $truncated[] = $fragment;
    }

    $result = implode($truncated,' ');

    return $result . ($input == $result ? '' : '...');
}

例如,如果截断(‘快速棕色狐狸跳过懒狗’,8,16);被调用,16个字符更短,因此将发生截断.因此,’狐狸跳过懒狗’将被删除,’…’将被追加.

但是,相反,我怎么能有一半的字符限制来自字符串的开头,一半来自字符串的结尾,中间删除的内容被’…’替换?
所以,我想要回来的字符串,其中一个案例是:’quic …懒狗’.

$text = 'the quick brown fox jumps over the lazy dog';
$textLength = strlen($text);
$maxChars = 16;

$result = substr_replace($text,'...',$maxChars/2,$textLength-$maxChars);

$结果现在是:

the quic...lazy dog

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读