PHP - 用完整的单词获得一个句子的%

时间:2014-06-03 22:28:23

标签: php

所以,我有这个,但是当我尝试用超过6个单词的句子时,这就失败了。

到目前为止我做了什么:

// My Sentence
$str = "Hello Stack Overflow";
// Split it into words with the delimiter being a space
$split = explode(" ", $str);
// Count Strings and divide it with number 3
$divider = str_word_count($str) / 3;

$last2 = $split[count($split)-$divider]; // penultimate word
$last1 = $split[count($split)-1]; // last word

// if $ divider gets penultimate word (don't more than that)
if ($divider < 2){
    echo $last2 . " " . $last1 . "<br>";} //echo last 2 words
else {
    echo $last2 . " " . $split[count($split)-2] . " " . $last1 . "<br>";} //echo last 3 words

它得到了#Stack; Stack Overflow&#34;,到目前为止一直很好。

我正在寻找的方法是获得这样的东西: enter image description here

由于

2 个答案:

答案 0 :(得分:1)

$str = "Stack Overflow";
$len = floor(strlen($str)*0.3);
$substr1 = substr($str, 0, $len);
$substr2 = substr($str, $len-1);
echo "FIRST: ".$substr1;
echo "SECOND: ".$substr2;

这应该这样做。

答案 1 :(得分:1)

<?php

$str = 'Hello Stack Overflow!';

$parts = explode(' ',preg_replace('/\s+/',' ',$str));
$index = round(count($parts)*0.7);
$remaining = array_splice($parts,$index); // parts passed as reference &

echo 'FIRST LINE: '.implode(' ',$parts);
echo "\n";
echo 'LAST LINE: '.implode(' ',$remaining);

?>

打印:

FIRST LINE: Hello Stack
LAST LINE: Overflow!

您正确使用爆炸,但使用array_splice修改原始爆炸阵列以切断最后30%(留下70%,因此为0.7乘数)。然后内爆两个部分将它们重新组合在一起。

老实说,我不确定这个问题(和这个解决方案)有什么用例。我打赌这是一个XY问题,而OP根本没有提供足够的上下文信息。