用一定数量的单词限制单词

时间:2016-01-10 08:50:49

标签: php

需要知道如何通过一个数字来记录单词。我已经搜遍了整个谷歌,但所有这些都不是由于一个未知的原因。

function trimtext($data, $limit) {
    //trim here
}

$test = 'This is a very very very long words here blablabla1 blablabla blablabla2  test';
echo trimtext($test, 10); //this should output 'This is a very very very long words here blablabla'

3 个答案:

答案 0 :(得分:1)

首先,使用explode()函数拆分字符串。然后使用array_slice()函数从数组中获取所需数量的元素。最后使用implode()函数来连接数组元素。

function trimtext($data, $limit) {
    $arr = explode(" ", $data);
    $new_arr = array_slice($arr, 0, $limit);
    return implode(" ", $new_arr);
}

$test = 'This is a very very very long words here blablabla blablabla blablabla  test';
echo trimtext($test, 10);

输出:

This is a very very very long words here blablabla 

以下是相关参考资料:

答案 1 :(得分:1)

具有str_word_count功能的替代方案:

$test = 'This is a very very very long words here blablabla blablabla blablabla  test';
function trimtext($text, $limit = 1) {
    if (empty($text)){
        return $text;
    }
    $words  = str_word_count($text, 1, '0123456789');
    $slice = (count($words) >= $limit)? array_slice($words, 0, $limit) : $words; 
    return implode(" ", $slice);
}
var_dump(trimtext($test, 10));

答案 2 :(得分:1)

使用正则表达式,可以在一次调用中完成preg_replace

$long_text = "This is a phrase that has 10 words in it. But 
              more text is following and should be ignored";

$first10 = preg_replace("/^(\s*(\S+\s+){0,9}\S+).*/s", '$1', $long_text);

$ first10 的内容将是:

  

这是一个包含10个单词的短语。

这是正则表达式的作用:

  • ^:仅匹配字符串的开头,而不是其他任何地方
  • \s*:在开始时允许0或更多空格
  • (...):捕获组,稍后将使用 $ 1
  • 引用匹配的内容
  • \S+:一个或多个非空格字符(即单词)
  • \s+:一个或多个空格
  • (...){0,9}:尽可能多次匹配,最多9次。
  • .*:直到最后的任何其他内容(之后没有指定其他内容)。
  • s:斜杠后的修饰符指示点也应匹配新行

请注意,这将与任何字符串匹配,因为它们都以零个或多个空格开头,其中包含零个或多个单词,并且后面有零个或多个字符。

替换是:

  • $1:在括号中捕获的内容(外部的),从而省略.*匹配的任何内容。

请参阅此fiddle

请注意,此解决方案可在以下情况下正常运行:

  • 字是数字;
  • 单词由多个空格分隔;
  • 单词由换行符,制表符或其他空格分隔;
  • 句子以空白开头;