6

PHP に不快なほど長い文字列があり、それを短くして何かを追加したい場合。

最初の 6 語または 42 文字のいずれか短い方に短縮し、短縮された場合は「...」を追加します。

短縮されず、「...」が追加されない唯一のケースは、元の文字が 6 語または 42 文字未満であった場合です。

PHPでこれを行うにはどうすればよいですか?

論理的には、文字列を空白で分割し、配列内の空白の前にそれぞれを追加し、その配列から最初の 6 つの要素のみを取り出して新しい文字列に書き込むと思います。

これが私がこれまでに持っているコードです:

str_1 = 'The quick brown fox jumped over the lazy dog';
$words = explode(" ", $str_1);
$counter = 0;
str_2 = '';
foreach($words as $word){
    if($counter < 5){
        //append $words[counter] to str_2;
        counter++;
    }
    else{
        break;
    }
}

文字数のカウント、比較、または追加のために残りを行う方法がわかりません。

誰にもアイデアはありますか?

4

4 に答える 4

10

私が作ったこの関数はかなりきれいに見えます:

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) break;

        $truncated[] = $fragment;
    }

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

    if ($input == $result)
    {
        return $input;
    }
    else
    {
        return preg_replace('/[^\w]$/', '', $result) . '...';
    }
}

いくつかのテスト:

$str = 'The quick brown fox jumped over the lazy dog';

echo truncate($str, 5, 42); // The quick brown fox jumped...
echo truncate($str, 3, 42); // The quick brown...
echo truncate($str, 50, 30); // The quick brown fox jumped over the...
echo truncate($str, 50, 100); // The quick brown fox jumped over the lazy dog

単語も半分にカットされないため、単語が指定された制限を超えて文字数を増やした場合、その単語は無視されます。

于 2013-05-24T01:08:01.033 に答える