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

标签 php string truncate

我想出了这个函数,它将给定的字符串截断为给定的单词数或给定的字符数,无论哪个更短。 然后,在超出字符数或字数限制后,它会在字符串中附加一个“...”。

如何从字符串中间删除字符/单词并将其替换为“...”,而不是将末尾的字符/单词替换为“...”?

这是我的代码:

function truncate($input, $maxWords, $maxChars){
    $words = preg_split('/\s+/', $input);
    $words = array_slice($words, 0, $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, 0, $maxChars - $chars);
            }
            break;
        }

        $truncated[] = $fragment;
    }

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

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

例如,如果调用 truncate('the quick brown fox jumps over the lazy dog', 8, 16);,则 16 个字符较短,因此这就是将发生的截断。因此,“fox jumps over the lazy dog”将被删除,并附加“...”。

但是,相反,我如何才能让一半的字符限制来自字符串的开头,一半来自字符串的结尾,并且中间删除的内容被替换为“...”? 因此,我希望在这种情况下返回的字符串是:'the quic...lazy dog'。

最佳答案

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

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

$result 现在是:

the quic...lazy dog

关于php - 截断字符串,但删除字符串的中间而不是结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869287/

相关文章:

java - JAXB 截断长值

html - 如何使用纯 css 截断文本按钮忽略文本中的 br 或换行符

PHP 脚本将目录从一台 Linux 服务器移动到另一台 Linux 服务器?

php - 只是在 mysql 错误中插入空白数组()

php - 警告 : mysql_fetch_array(): supplied argument is not a valid

java - 将第一个单词移到句子的末尾?

c# - 使用列表框中对象的属性

php - 每次我在 PHP 中输​​入 > 时如何停止 vim 发出哔哔声

java - 对Java中的字符串感到困惑

timestamp - 在 SQL Snowflake 中将时间戳截断为自定义时间单位