Zeichenkette abschneiden, aber statt Ende die Mitte der Zeichenkette entfernen

Ich habe mir diese Funktion ausgedacht, die eine bestimmte Zeichenfolge entweder auf die angegebene Anzahl von Wörtern oder auf die angegebene Anzahl von Zeichen abschneidet, was auch immer kürzer ist. Nachdem alles nach der Anzahl der Zeichen oder Wörter abgeschnitten wurde, wird ein '...' an die Zeichenfolge angehängt.

Wie kann ich Zeichen / Wörter aus der Mitte der Zeichenfolge entfernen und durch '...' ersetzen, anstatt Zeichen / Wörter am Ende durch '...' zu ersetzen?

Hier ist mein Code:

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 ? '' : '...');
}

Zum Beispiel wenntruncate('the quick brown fox jumps over the lazy dog', 8, 16); heißt, 16 Zeichen ist kürzer, so dass die Kürzung, die passieren wird. "Fuchs springt über den faulen Hund" wird entfernt und "..." angehängt.

Aber wie kann ich stattdessen die Hälfte der Zeichenbeschränkung vom Anfang der Zeichenfolge und die Hälfte vom Ende der Zeichenfolge haben und das, was in der Mitte entfernt wird, durch "..." ersetzen? Also, die Zeichenfolge, die ich in diesem einen Fall zurückgeben möchte, wäre: 'der schnelle ... faule Hund'.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage