【问题标题】:select 40 words from a string从字符串中选择 40 个单词
【发布时间】:2013-10-04 14:26:19
【问题描述】:

我有一个最多可以包含 2000 个字符的字符串。我只想显示前 40 个单词。

字符串是$row['content']。我如何只显示前 50 个?

谢谢。

【问题讨论】:

  • 它是什么? 40 还是 50?
  • mysql 标签和这个有什么关系?
  • 仅供参考,投票最多的答案是返回数组,要实际输出它们,您需要将结果传递给 implode 以将它们转换为字符串,例如$string = implode(' ',$wordsArray);

标签: php string


【解决方案1】:

假设单词会用空格分隔。

$words40=explode(" ", $string,41);
unset($words40[40]); // Discard the last element containing the remaining string

当然这在标点符号上会失败,但是由于您没有提及您的字符串是否包含与人类可读语言或任何其他值有关的内容,因此没有理由假设它将是英语语法,因此答案.

Reference

【讨论】:

  • 这不是要走的路。您至少应该使用regexp 来分隔单词。
  • 在这个模糊的场景中有什么不同?
  • 仅供参考,这不会返回前 40 个单词。字符串的其余部分保留在最后一个元素中
  • 我们把它设为 41 并丢弃最后一个
  • 不,我不擅长正则表达式,这就是为什么我找到了不使用正则表达式但包括标点符号(grr)的最简单方法,无论如何,str_word_count()在幕后使用正则表达式;)跨度>
【解决方案2】:

最简单的解决方案是wordwrap()。但既然你想要 40/50 words 而不是 signs,你应该这样做:

<?php

$string = "Your long string";
$result = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', $string, -1, PREG_SPLIT_NO_EMPTY);
$words = implode(' ', array_slice($result, 0 ,50));

?>

来自Split a text into single words的正则表达式

【讨论】:

    【解决方案3】:
    $wordArray = str_word_count($row['content'], 1);
    $wordArraySlice = array_slice($wordArray, 0, 40);
    $wordString = implode(" ", $wordArraySlice);
    
    echo $wordString;
    

    此函数计算所有单词并返回一个数组。然后,您可以使用 array_slice 返回您需要的 40 - 50 个单词,然后将它们内爆以获取字符串...如果您愿意。

    【讨论】:

    • 可能想加入array_slice 以获得最终返回值
    • 啊。美好的。扭动我的手臂!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2019-03-04
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多