PHP字数统计函数

时间:2015-05-06 15:38:49

标签: php arrays string word-count

我正在尝试编写我的第一个自定义函数。我知道还有其他功能可以做同样的事情,但是这个是我的。我有函数写的,但我不理解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'alloor坐在amet consectetur adipiscing elit Mauris in diam ...

注意amet丢失后的“,”。

在结尾处忽略句点字符串,我将它们连接到返回

之前的结尾处

感谢您的帮助。

戴夫

3 个答案:

答案 0 :(得分:1)

更新了基于空格爆炸的功能

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;
}

答案 1 :(得分:0)

关于第三个参数的PHP手册,charlist:

  

将被视为“word”

的其他字符列表

这些是通常的a-z之外的任何字符,应该作为单词的一部分包含在内,并且不会导致单词中断。

如果您查看链接到的PHP手册上的示例1,它将显示一个示例,其中“fri3nd”一词仅在charlist参数中包含3时被归类为1个字。

答案 2 :(得分:-1)

<?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;
}
?>