【问题标题】:Cut the content after 10 words [duplicate]剪切10个字后的内容[重复]
【发布时间】:2012-09-16 06:47:43
【问题描述】:

可能重复:
How to select first 10 words of a sentence?

我想显示内容词的 10 个词而不是字符

$string = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';

结果应该是
“Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare”

【问题讨论】:

  • 根据用例,您可能更愿意为此使用 CSS text-overflow:ellipsis; 而不是截断您的字符串。

标签: php string


【解决方案1】:

试试这个功能:

function shorten_string($string, $wordsreturned)
{
  $retval = $string;
  $string = preg_replace('/(?<=\S,)(?=\S)/', ' ', $string);
  $string = str_replace("\n", " ", $string);
  $array = explode(" ", $string);
  if (count($array)<=$wordsreturned)
  {
    $retval = $string;
  }
  else
  {
    array_splice($array, $wordsreturned);
    $retval = implode(" ", $array)." ...";
  }
  return $retval;
}

在你的文字上,像这样:

$string = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';
$firsttenwords = shorten_string($string, 10);

来自here

更新:现在它既符合空间要求,也符合换行要求。

【讨论】:

  • 非常感谢,你是救生员
  • @thi - 在他接受/投票您的答案之前,无需戳 OP。从他的个人资料中可以看出,用户非常清楚如何接受答案。绝不是任何人需要点击接受。至于投票,您只是复制了一些在其他地方找到的代码 - 不值得 IMO 投票。
  • @think123 我接受了你的回答,但按摩告诉我我必须等待 3 分钟才能接受任何答案
  • 作为对那些使用此代码的人的警告,只有当您的句子使用精确的语法形成时,上述内容才有效。即"what happens if you have a sentence-----like this." (将破折号成像为所有空格),或"this sentence\nhas a new line in it" - OP 的请求中存在一个完美的例子(没有空格的逗号) .
  • @pebbl 那么它不会完全是正确的语法,不是吗?无论如何,关于间距,我想我可以解决这个问题。
【解决方案2】:

无论您在单词之间使用哪种“空格”,此版本都可以使用,并且可以轻松扩展以处理其他字符......它目前支持任何空格字符加 , 。 ; ? !

function getSnippet( $str, $wordCount = 10 ) {
  return implode( 
    '', 
    array_slice( 
      preg_split(
        '/([\s,\.;\?\!]+)/', 
        $str, 
        $wordCount*2+1, 
        PREG_SPLIT_DELIM_CAPTURE
      ),
      0,
      $wordCount*2-1
    )
  );
}

对于那些应该可能更喜欢原始格式的人:)

function getSnippet( $str, $wordCount = 10 ) {
  return implode( '', array_slice( preg_split('/([\s,\.;\?\!]+)/', $str, $wordCount*2+1, PREG_SPLIT_DELIM_CAPTURE), 0, $wordCount*2-1 ) );
}

【讨论】:

  • -1 表示缩进不好,但 +2 表示很好的解决方案 = 总计 +1 :P
  • 啊嘿欢呼 :) 我这样做只是因为我对中间页面水平滚动条的外观有仇视 - 我希望 SO 能够实现悬停代码显示或其他东西......跨度>
【解决方案3】:

试试:

$str = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';
$arr = explode(" ", str_replace(",", ", ", $str));
for ($index = 0; $index < 10; $index++) {
    echo $arr[$index]. " ";
}

输出:
Lorem ipsum dolor sit amet, consectetur adipiscing elit。毛里斯·奥尔纳雷

【讨论】:

  • 注意amet,consectetur中没有空格
  • @xdazz 这应该是一个错误,一个正确的句子应该在逗号后有一个空格。无论如何,我也更改了解决方案以适应此要求。
  • @alfasin 在句子结构的世界里,人们总是会犯错……而在输入网页内容的世界里,人们甚至更糟。 imo 您的代码应该能够处理的不仅仅是单个有问题的用例。
  • @pebbl 试图消除它,你总是会遇到你没有考虑过的新情况。这完全没问题——唯一重要的是它对你有多重要。如果您需要完美,那么是的,无论如何,处理您能想到的所有可能性,并继续迭代新案例,直到您达到令人满意的输出质量。但是,如果您只想抓住前 10 个单词并在之后添加“阅读更多...”链接,那么 TMO 将是矫枉过正。但这只是我的两分钱;)
  • @alfasin 优点 (在任何情况下,您尝试并获得多少“完美”都是有限度的——如果没有,您往往会有点疯狂;) i>,我仍然感到困惑的是,没有提供一种 RegExp 解决方案,即使您自己的解决方案也可以通过使用爆炸和替换的 preg 版本得到改进 - 并且会消除许多可预见的问题。我想这归结于这样一个事实,即人们不认为任意修剪段落是一个好主意-因此,最终得到 12 个单词或 6 个 (这可能是真的) 并不重要.
【解决方案4】:

我们可以使用 str_word_count 函数检索字符串中的单词。

更多功能说明请参考以下链接

http://php.net/manual/en/function.str-word-count.php

如果字符串中只显示10个单词,请参考下面的代码sn-p

    $str='Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';
    $words=str_word_count($str,true);
    $a=array_slice($words,10);
    $s=join('',$a);
    echo $s;

【讨论】:

  • 这将不起作用,您必须分解 $words 才能创建数组,因为 array_slice 需要数组。 str_word_count 也像你一样只计算使用的字数,正确的方法是 str_word_count($str,1)!
  • 这会起作用:$str='Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis。 $words = str_word_count($str,1); $words = array_slice($words,0,10); $words = implode(" ", $words);回声 $words;
【解决方案5】:

这样试试

$str = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';
$arr = explode(" ", str_replace(",",", ",$str), 10);
echo implode(" ", $arr);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多