如果我在PHP中有一个字符串,这个字符串在PHP中是一个令人讨厌的长字符串,我想缩短它然后附加一些东西。
我希望将它缩短为前6个单词或42个字符,不管是短的还是如果它被缩短都会附加'...'。
唯一的情况是它不会被缩短而且“......”没有被添加,如果它最初是少于6个字或42个字符。
我如何在PHP中执行此操作?
逻辑上,我认为我会用白色空格分割字符串,然后在数组中的空白字符之前添加每个东西,只取出该数组中的前6个元素并将它们写入新字符串。 / p>
这是我到目前为止的代码:
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;
}
}
我不知道如何处理字符数或比较或追加。
有没有人有任何想法?
答案 0 :(得分: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
它也不会将单词切成两半,所以如果一个单词将字符数超过提供的限制,它将被忽略。
答案 1 :(得分:3)
计算单词(假设空格分隔单词):
$words = explode(' ', $string);
$wordCount = count($words );
计算字符数
$length = strlen($string);
一起
if($wordCount > 5) {
$words = array_slice($words, 0, 5);
$string = implode(' ', $words);
$length = strlen($string);
}
if($length > 42) {
$string = substr($string , 0, 42);
}
答案 2 :(得分:2)
这将为您提供前6个单词,或前n个单词,其中单词的总长度小于42。
$words = explode(' ', $string);
$newstring = "";
$i=0;
while (strlen($newstring . $words[$i]) <= 42) && $i < 5) {
$newstring .= $words[$i];
}
if (strlen($string) > strlen($newstring)) $newstring .= "...";
答案 3 :(得分:0)
$string = "Your Text Here";
$string_length = 80; // give a random character value including whitespace.
if(strlen($string)>$string_length){
do{
$new_string = substr($string,0,$string_length);
$string_length++;
}while(ctype_graph(substr($new_string,-1)));
}
else {
$new_string = $string;
}
echo $new_string;