обрезать строку, но удалить конец строки вместо конца

Я придумал эту функцию, которая усекает заданную строку либо до заданного числа слов, либо до заданного числа символов, что бы ни было короче Затем, после того, как он отрубает все, после ограничения количества символов или слов, он добавляет «...» к строке.

Как удалить символы / слова из середины строки и заменить их на «...» вместо замены символов / слов в конце на «...»?

Вот мой код:

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 символов короче, так что произойдет усечение. Таким образом, «лиса перепрыгивает через ленивую собаку» будет удалена, а «...» добавлена.

Но вместо этого, как я могу получить половину предела символов из начала строки и половину из конца строки, а то, что удалено в середине, заменено на «...»? Итак, строка, которую я хочу вернуть в этом, единственном случае: «quic ... lazy dog».

Ответы на вопрос(3)

Ваш ответ на вопрос