PHP字数统计功能
PHP Word Count Function
我正在尝试编写我的第一个自定义函数。我知道还有其他功能可以做同样的事情,但这个是我的。我写了函数,但我不明白 char_list 因为它属于函数,无法弄清楚 php 中 str_word_count function 的第三个参数。我想我需要以某种格式来维护句点、逗号、分号、冒号等。请注意,在整个函数中维护双引号和单引号。它是从字符串中剥离的底部符号。
$text = "Lorem ipsum' dolor sit amet, consectetur; adipiscing elit. Mauris in diam vitae ex imperdiet fermentum vitae ac orci. In malesuada."
function textTrim($text, $count){
$originalTxtArry = str_word_count($text, 1);
$shortenTxtArray = str_word_count(substr(text, 0,$count), 1);
foreach ($shortenTxtArray as $i=>$val) {
if ($originalTxtArry[$i] != $val) {
unset($shortenTxtArray[$i]);
}
}
$shortenTxt = implode(" ", $shortenTxtArray)."...";
return $shortenTxt;
}
输出
Lorem ipsum' dolor sit amet consectetur adipiscing elit Mauris in diam...
注意 amet 后面的“,”不见了。
忽略末尾的句点字符串,我将它们连接到 return
之前的末尾
感谢您的所有帮助。
戴夫
来自PHP手册关于第三个参数,charlist:
A list of additional characters which will be considered as 'word'
这些是通常的 a-z 之外的任何字符,应作为单词的一部分包含在内,并且不会导致单词中断。
如果您查看链接到的 PHP 手册中的示例 1,它会显示一个示例,其中当 charlist 参数中包含 3 时,单词 'fri3nd' 仅被归类为 1 个单词.
更新函数以根据 space
分解
function textTrim($str, $limit){
/** remove consecutive spaces and replace with one **/
$str = preg_replace('/\s+/', ' ', $str);
/** explode on a space **/
$words = explode(' ', $str);
/** check to see if there are more words than the limit **/
if (sizeOf($words) > $limit) {
/** more words, then only return on the limit and add 3 dots **/
$shortenTxt = implode(' ', array_slice($words, 0, $limit)) . '...';
} else {
/** less than the limit, just return the whole thing back **/
$shortenTxt = implode(' ', $words);
}
return $shortenTxt;
}
<?php
function trimTxt($str, $limit){
/** remove consecutive spaces and replace with one **/
$str = preg_replace('/\s+/', ' ', $str);
/** explode on a space **/
$words = explode(' ', $str);
/** check to see if there are more words than the limit **/
if (sizeOf($words) > $limit) {
/** more words, then only return on the limit and add 3 dots **/
$shortTxt = implode(' ', array_slice($words, 0, $limit)) . 'content here';
} else {
/** less than the limit, just return the whole thing back **/
$shortTxt = implode(' ', $words);
}
return $shortTxt;
}
?>
我正在尝试编写我的第一个自定义函数。我知道还有其他功能可以做同样的事情,但这个是我的。我写了函数,但我不明白 char_list 因为它属于函数,无法弄清楚 php 中 str_word_count function 的第三个参数。我想我需要以某种格式来维护句点、逗号、分号、冒号等。请注意,在整个函数中维护双引号和单引号。它是从字符串中剥离的底部符号。
$text = "Lorem ipsum' dolor sit amet, consectetur; adipiscing elit. Mauris in diam vitae ex imperdiet fermentum vitae ac orci. In malesuada."
function textTrim($text, $count){
$originalTxtArry = str_word_count($text, 1);
$shortenTxtArray = str_word_count(substr(text, 0,$count), 1);
foreach ($shortenTxtArray as $i=>$val) {
if ($originalTxtArry[$i] != $val) {
unset($shortenTxtArray[$i]);
}
}
$shortenTxt = implode(" ", $shortenTxtArray)."...";
return $shortenTxt;
}
输出 Lorem ipsum' dolor sit amet consectetur adipiscing elit Mauris in diam...
注意 amet 后面的“,”不见了。
忽略末尾的句点字符串,我将它们连接到 return
之前的末尾感谢您的所有帮助。
戴夫
来自PHP手册关于第三个参数,charlist:
A list of additional characters which will be considered as 'word'
这些是通常的 a-z 之外的任何字符,应作为单词的一部分包含在内,并且不会导致单词中断。
如果您查看链接到的 PHP 手册中的示例 1,它会显示一个示例,其中当 charlist 参数中包含 3 时,单词 'fri3nd' 仅被归类为 1 个单词.
更新函数以根据 space
分解function textTrim($str, $limit){
/** remove consecutive spaces and replace with one **/
$str = preg_replace('/\s+/', ' ', $str);
/** explode on a space **/
$words = explode(' ', $str);
/** check to see if there are more words than the limit **/
if (sizeOf($words) > $limit) {
/** more words, then only return on the limit and add 3 dots **/
$shortenTxt = implode(' ', array_slice($words, 0, $limit)) . '...';
} else {
/** less than the limit, just return the whole thing back **/
$shortenTxt = implode(' ', $words);
}
return $shortenTxt;
}
<?php
function trimTxt($str, $limit){
/** remove consecutive spaces and replace with one **/
$str = preg_replace('/\s+/', ' ', $str);
/** explode on a space **/
$words = explode(' ', $str);
/** check to see if there are more words than the limit **/
if (sizeOf($words) > $limit) {
/** more words, then only return on the limit and add 3 dots **/
$shortTxt = implode(' ', array_slice($words, 0, $limit)) . 'content here';
} else {
/** less than the limit, just return the whole thing back **/
$shortTxt = implode(' ', $words);
}
return $shortTxt;
}
?>