如果我在
@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
它也不会将单词切成两半,所以如果一个单词将字符数超过提供的限制,它将被忽略.