将字符串限制为PHP中的前5个字或前42个字符

前端之家收集整理的这篇文章主要介绍了将字符串限制为PHP中的前5个字或前42个字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我在 @L_502_0@中有一个字符串,它在 @L_502_0@中是一个令人讨厌的长字符串,我想缩短它然后附加一些东西.

我希望将它缩短为前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;
    }
}

我不知道如何做其余的字符计数或比较或追加.

有没有人有任何想法?

我做的这个功能看起来很整洁:
function truncate($input,$maxWords,$maxChars)
{
    $words = preg_split('/\s+/',$input);
    $words = array_slice($words,$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,100); // The quick brown fox jumped over the lazy dog

它也不会将单词切成两半,所以如果一个单词将字符数超过提供的限制,它将被忽略.

猜你在找的PHP相关文章