我想出了这个函数,它将给定的字符串截断为给定的单词数或给定的字符数,无论是较短的。然后,在字符数或单词数限制后将所有内容切掉后,它会在字符串中附加一个“...”。
如何从字符串中间删除字符/单词并用“...”替换它们,而不是用“...”替换末尾的字符/单词?
这是我的代码:
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 个字符会更短,因此会发生截断。因此,“狐狸跳过懒狗”将被删除,而“...”将被附加。
但是,相反,我怎样才能让字符限制的一半来自字符串的开头,一半来自字符串的结尾,而中间删除的内容被“...”替换?所以,我希望在这个案例中返回的字符串是:'the quic...lazy dog'。