如何在PHP中的特定字/字符限制后添加“ ...”?

时间:2019-05-08 15:48:02

标签: php wordpress string split strlen

我正在处理如下所示的php代码:

   <div class="case-breaking__content">
        <p><?php echo the_title(); ?></p>
   </div>

上面的php代码返回以下内容:

absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns 

我想要的是,在特定字数限制之后,它应该显示...让我们说8个字之后,应该是这样;

absv shss xcnx shss hshhs shhsw shshs hsnna...

我尝试了以下方式,但似乎不起作用:

<div class="case-breaking__content">
<p><?php $out = strlen(the_title()) > 50 ? substr(the_title(),0,50)."..." : the_title(); ?></p>
</div>

3 个答案:

答案 0 :(得分:3)

如果愿意,您可以简单地在空格上进行preg_split,然后将数组连接回具有限制数的字符串:

$str = "absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns
";

$arr = preg_split('/(\s)/m', $str);
$limit = 8;
$title = '';
foreach ($arr as $key => $value) {
    if ($key < $limit) {
        $title .= $value . " ";
    } else {
        $title .= "...";
        break;
    }
}

var_dump($title);

输出

string(47) "absv shss xcnx shss hshhs shhsw shshs hsnna ..."

如果单词数少于您想要的限制,您还可以添加一个if语句,以便打破循环,也许类似于:

$str = "absv shss xcnx shss hshhs";
// $str = "absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns";

$arr = preg_split('/(\s)/m', $str);
$limit = 8;
$title = '';
foreach ($arr as $key => $value) {
    if (sizeof($arr) < $limit - 1) {
        $title .= $str . " ...";
        break;
    }
    if ($key < $limit) {
        $title .= $value . " ";
    } else {
        $title .= "...";
        break;
    }
}

var_dump($title);

输出

string(29) "absv shss xcnx shss hshhs ..."

实施

如果您希望实现此代码,则可能会起作用:

$arr = preg_split('/(\s)/m', get_the_title());
$limit = 8; // number of words limit
$title = '';
foreach ($arr as $key => $value) {
    if (sizeof($arr) < $limit - 1) {
        $title .= get_the_title() . " ...";
        break;
    }
    if ($key < $limit) {
        $title .= $value . " ";
    } else {
        $title .= "...";
        break;
    }
}

$out = '<div class="case-breaking__content">';
$out .= '<p>';
$out .= $title;
$out .= '</p>';
$out .= '</div>';

echo $out;

答案 1 :(得分:2)

the_title()回显标题而不是返回标题。如果要对其执行操作,则要使用get_the_title()

<div class="case-breaking__content">
<p><?php echo strlen(the_title()) > 50 ? substr(get_the_title(),0,50)."..." : get_the_title(); ?></p>
</div>

这就是说,如果您使用的是WordPress,最简单的选择是使用内置功能wp_trim_words() https://codex.wordpress.org/Function_Reference/wp_trim_words

所以就您而言

<div class="case-breaking__content">
<p><?php echo wp_trim_words( get_the_title(), 8, '...') ?></p>
</div>

答案 2 :(得分:1)

<div class="case-breaking__content">
    <?php $words = explode(" ", the_title()); ?>
    <p><?php echo count($words) <= 8 ? the_title() : implode(" ", array_slice($words, 0, 8)) . "..."; ?></p>
</div>

Vanilla PHP解决方案,不需要比这更复杂。