从字符串显示n个字符,然后在最后一个点后剪切它

时间:2017-09-06 12:01:21

标签: php string

我对此代码有疑问

function retrieveMainPage($conn, $controlNumber)
{
$prep_stmt = "SELECT * FROM blog ORDER BY id DESC";
$stmt = $conn->prepare($prep_stmt);

if ($stmt) {
    $stmt->execute();
    $result = $stmt->get_result();

    while ($row = $result->fetch_assoc()) {
        $id[] = $row['id'];
        $heading[] = $row['heading'];
        $article[] = $row['article'];
        $image[] = $row['image'];
        $timestamp[] = $row['timestamp'];
    }
} else {
    echo "stmt error";
    die();
}
$daySubtract = substr($timestamp[$controlNumber], 8, 2);
$monthSubtract = substr($timestamp[$controlNumber], 5, 2);
if ($monthSubtract == "01") {
    $monthSubtract = "Jan";
} else if ($monthSubtract == "02") {
    $monthSubtract = "Feb";
} else if ($monthSubtract == "03") {
    $monthSubtract = "Mar";
} else if ($monthSubtract == "04") {
    $monthSubtract = "Apr";
} else if ($monthSubtract == "05") {
    $monthSubtract = "Máj";
} else if ($monthSubtract == "06") {
    $monthSubtract = "Jún";
} else if ($monthSubtract == "07") {
    $monthSubtract = "Júl";
} else if ($monthSubtract == "08") {
    $monthSubtract = "Aug";
} else if ($monthSubtract == "09") {
    $monthSubtract = "Sep";
} else if ($monthSubtract == "10") {
    $monthSubtract = "Okt";
} else if ($monthSubtract == "11") {
    $monthSubtract = "Nov";
} else if ($monthSubtract == "12") {
    $monthSubtract = "Dec";
}
$day = "<p class=\"date\">" . $daySubtract . "</p>";
$month = "<p class=\"month\">" . $monthSubtract . "</p>";
if ($controlNumber < 4) {
    echo "<div class=\"s-12 l-6 post-image\">";
    echo "<a href=\"http://127.0.0.1/WIP/sites/post.php?id$id[$controlNumber]\">";
    echo $image[$controlNumber];
    echo "</a>";
    echo "</div>";
    echo "<div class=\"s-12 l-5 post-text\">";
    echo "<a href=\"http://127.0.0.1/WIP/sites/post.php?id$id[$controlNumber]\">";
    echo "<h2>" . $heading[$controlNumber] . "</h2>";
    echo "</a>";
    echo untilPeriod($article[$controlNumber]);
    echo "</div>";
    echo "<div class=\"s-12 l-1 post-date\">";
    echo $day;
    echo $month;
    echo "</div>";
} else {
    echo "<div class=\"s-12 l-11 post-text\">";
    echo "<a href=\"http://127.0.0.1/WIP/sites/post.php?id$id[$controlNumber]\">";
    echo "<h2>" . $heading[$controlNumber] . "</h2>";
    echo "</a>";
    echo untilPeriod($article[$controlNumber]);
    echo "</div>";
    echo "<div class=\"s-12 l-1 post-date\">";
    echo $day;
    echo $month;
    echo "</div>";
}
}

function untilPeriod($text, $length = 440) {
if (strlen($text) > $length) {
    $substr = substr(substr($text, 0, strrpos($text.",", ".")), 0 , $length);
    $pieces = explode(".", $substr);
    array_pop($pieces);
    $text = implode(".", $pieces).".";
}
return $text;
}  

我从包含$ controlNumber的另一个文件(0到4之间的数字)发送带有ajax请求的数字,因为我希望每次从接收到的数组中显示其他数据。
函数直到句点似乎工作但是当$ controlNumber为2时,文本没有显示,我只得到这个“。”。 **抱歉发布整个代码,但如果你看不到代码就很难解释我的问题...

2 个答案:

答案 0 :(得分:1)

  

工作演示:( 100个字符视图) https://eval.in/856462

<?php 

   // Here., Mystr Var is Your $row["article"]

$Mystr ="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempor ut quam in dapibus. Morbi in tortor fermentum, ornare ex quis, pulvinar ex. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris sollicitudin risus et pulvinar eleifend. Aenean id nisl risus. Aenean eu efficitur enim. Suspendisse condimentum ornare ullamcorper. Nulla aliquet nisl non fermentum convallis. Quisque bibendum nunc sit amet augue dictum, et placerat urna hendrerit. Maecenas consequat libero convallis tincidunt auctor. Mauris ultrices risus non nulla viverra, vitae convallis mauris hendrerit. Fusce eget suscipit ligula. Proin quis pharetra nulla, non elementum dui. Sed commodo ut dui vel iaculis. Suspendisse mattis auctor arcu non dignissim. Cras ut accumsan nunc.

Phasellus in mollis nisi. Etiam tellus dui, ultrices sed nisl vel, dapibus egestas erat. Fusce turpis augue, condimentum eu cursus eu, imperdiet sollicitudin augue. Nulla facilisi. Mauris vel fermentum nunc, porta laoreet dolor. Morbi malesuada congue arcu id dictum. Maecenas maximus semper lectus in rutrum. Etiam sit amet sapien finibus, pellentesque augue eget, scelerisque felis. Sed posuere semper tristique. Nullam cursus eget felis vel ultricies. Morbi molestie ullamcorper varius. Cras ipsum velit, vehicula eu purus vitae, molestie dapibus odio. Cras sit amet vulputate massa, et ullamcorper justo.



Donec in massa ut dui varius faucibus. Maecenas lacinia suscipit nisl, at condimentum nunc. Nulla dignissim interdum arcu sed egestas. Integer finibus mauris nec orci pellentesque porttitor. Phasellus bibendum, quam nec cursus lobortis, diam sapien sodales est, laoreet fringilla erat ipsum vitae arcu. Pellentesque lobortis ante vitae vehicula vehicula. In laoreet, ante ut consectetur efficitur, dolor sem imperdiet urna, eget consectetur orci felis at odio. In iaculis orci et massa dictum, ac rhoncus velit vehicula. Donec felis arcu, placerat finibus blandit dapibus, vulputate id eros. Ut lorem mi, efficitur id lorem et, tincidunt pellentesque mi. Integer lacinia a quam sit amet efficitur. Blah Blah. Test";

  //$pos = strrpos($Mystr, '.');

   $withOutDot[] = substr($Mystr, 0,100). '.';

   $MyString = implode(" ",$withOutDot);

   echo $MyString;

?>

<强>输出:

  

Lorem ipsum dolor坐下来,精神上的精神。 Duis tempor ut quam in dapibus。 Morbi in to。

答案 1 :(得分:1)

你需要剪切字符串,然后按句点爆炸,删除最后一个元素,连接所有部分并放置最后一个点。另外,检查您的字符串是否大于要剪切的字符串。如果不是,请保持原样。像这样:

<?php
$length = 250;
$row["article"] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempor ut quam in dapibus. Morbi in tortor fermentum, ornare ex quis, pulvinar ex. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris sollicitudin risus et pulvinar eleifend. Aenean id nisl risus. Aenean eu efficitur enim. Suspendisse condimentum ornare ullamcorper. Nulla aliquet nisl non fermentum convallis. Quisque bibendum nunc sit amet augue dictum, et placerat urna hendrerit. Maecenas consequat libero convallis tincidunt auctor. Mauris ultrices risus non nulla viverra, vitae convallis mauris hendrerit. Fusce eget suscipit ligula. Proin quis pharetra nulla, non elementum dui. Sed commodo ut dui vel iaculis. Suspendisse mattis auctor arcu non dignissim. Cras ut accumsan nunc.

Phasellus in mollis nisi. Etiam tellus dui, ultrices sed nisl vel, dapibus egestas erat. Fusce turpis augue, condimentum eu cursus eu, imperdiet sollicitudin augue. Nulla facilisi. Mauris vel fermentum nunc, porta laoreet dolor. Morbi malesuada congue arcu id dictum. Maecenas maximus semper lectus in rutrum. Etiam sit amet sapien finibus, pellentesque augue eget, scelerisque felis. Sed posuere semper tristique. Nullam cursus eget felis vel ultricies. Morbi molestie ullamcorper varius. Cras ipsum velit, vehicula eu purus vitae, molestie dapibus odio. Cras sit amet vulputate massa, et ullamcorper justo.



Donec in massa ut dui varius faucibus. Maecenas lacinia suscipit nisl, at condimentum nunc. Nulla dignissim interdum arcu sed egestas. Integer finibus mauris nec orci pellentesque porttitor. Phasellus bibendum, quam nec cursus lobortis, diam sapien sodales est, laoreet fringilla erat ipsum vitae arcu. Pellentesque lobortis ante vitae vehicula vehicula. In laoreet, ante ut consectetur efficitur, dolor sem imperdiet urna, eget consectetur orci felis at odio. In iaculis orci et massa dictum, ac rhoncus velit vehicula. Donec felis arcu, placerat finibus blandit dapibus, vulputate id eros. Ut lorem mi, efficitur id lorem et, tincidunt pellentesque mi. Integer lacinia a quam sit amet efficitur. Blah Blah. Test";
function untilPeriod($text, $length = 100) {
    if (strlen($text) > $length) {
        $substr = substr(substr($text, 0, strrpos($text.",", ".")), 0 , $length);
        $pieces = explode(".", $substr);
        array_pop($pieces);
        $text = implode(".", $pieces).".";
    }
    return $text;
}
echo untilPeriod($row["article"]);

<强>输出

  

Lorem ipsum dolor坐下来,精神上的精神。 Duis tempor ut quam in dapibus。 Morbi in tortor fermentum,ornare ex quis,pulvinar ex。根据inpios himenaeos,每个conubia nostra的类别taciti sociosqu ad litora torquent。

Demo