需要知道如何通过一个数字来记录单词。我已经搜遍了整个谷歌,但所有这些都不是由于一个未知的原因。
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'
答案 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。
请注意,此解决方案可在以下情况下正常运行: