截断距字符串开头不超过 N 个字符的空格之前的句子

问题描述 投票:0回答:7

我已经编写了 PHP 代码来获取给定动态句子的某些部分,例如

this is a test sentence

substr($sentence,0,12);

我得到输出:

this is a te

但我需要它作为一个完整的单词停止,而不是拆分一个单词:

this is a

记住

$sentence
不是固定字符串(可以是任何字符串),我该怎么做?

php string cpu-word truncate
7个回答
3
投票

使用自动换行


3
投票

如果您使用的是 PHP4,则只需使用

split
:

$resultArray = split($sentence, " ");

数组的每个元素都是一个单词。不过要小心标点符号。

explode
将是 PHP5 中推荐的方法:

$resultArray = explode(" ", $sentence);

2
投票

首先。在太空中使用爆炸。然后,计算每个部分+总的组装字符串,如果没有超出限制,则将其用空格连接到字符串上。


1
投票

尝试使用 explode() 函数。

您的情况:

$expl = explode(" ",$sentence);

您将得到一个数组中的句子。第一个单词是 $expl[0],第二个单词是 $expl[1],依此类推。要将其打印在屏幕上,请使用:

$n = 10 //words to print
for ($i=0;$i<=$n;$i++) {
  print $expl[$i]." ";
}

0
投票

创建一个可以随时重复使用的函数。如果给定字符串的长度大于您要修剪的字符数,这将查找最后一个空格。

function niceTrim($str, $trimLen) {
    $strLen = strlen($str);
    if ($strLen > $trimLen) {
        $trimStr = substr($str, 0, $trimLen);
        return substr($trimStr, 0, strrpos($trimStr, ' '));
    }
    return $str;
}

$sentence = "this is a test sentence";
echo niceTrim($sentence, 12);

这将打印

this is a

按要求。

希望这是您正在寻找的解决方案!


0
投票

这只是伪代码而不是 php,

char[] sentence="your_sentence";
string new_constructed_sentence="";
string word="";
for(i=0;i<your_limit;i++){
character=sentence[i];
if(character==' ') {new_constructed_sentence+=word;word="";continue}
word+=character;
}

new_constructed_sentence 就是你想要的!!!


0
投票

您的“句子”不包含任何标点符号,因此我假设所需的截断应该出现在空格之前。

使用简单的正则表达式模式贪婪地匹配从字符串开头算起的 0 到 N 个字节,然后匹配一个空格,然后用

\K
忘记匹配的字符,然后匹配句子的其余部分。 用空字符串替换该匹配项。

代码:(演示

$text = 'this is a test sentence';

$max = 12;
var_export(
    preg_replace(
        "/.{0,$max}\K .*/",
        '',
        $text
    )
);
// 'this is a'
© www.soinside.com 2019 - 2024. All rights reserved.