指定された文字列を、指定された単語数または指定された文字数のいずれか短い方に切り詰めるこの関数を思いつきました。次に、文字数または単語数の制限の後にすべてを切り捨てた後、文字列に「...」を追加します。
末尾の文字/単語を「...」に置き換えるのではなく、文字列の途中から文字/単語を削除して「...」に置き換えるにはどうすればよいですか?
これが私のコードです:
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' になります。