3 Вопрос: Как добавить «…» после определенного ограничения слова / символа в PHP?

вопрос создан в Wed, May 8, 2019 12:00 AM

Я работаю над кодом 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>
    
2
  1. Каким образом это "не похоже на работу"?
    2019-05-08 15: 53: 46Z
  2. @ ChrisWhite Не отображается ... и отображается весь список слов.
    2019-05-08 15: 55: 25Z
  3. <? php echo strlen (the_title ()) > 50? substr (the_title (), 0,50). "...": the_title (); ? &GT;
    2019-05-08 16: 00: 58Z
  4. @ RakeshJakhar Я вставил ваш код, что происходит сейчас, когда я вижу содержимое дважды. Как это absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns
    2019-05-08 16: 03: 32Z
3 ответа                              3                         

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
2019-05-08 16: 21: 57Z

Вы можете просто выполнить 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;
    
3
2019-05-08 16: 25: 02Z
  1. Спасибо за ответ. Это выглядит здорово. Мне интересно, как я могу интегрировать этот код с кодом в вопросе выше.
    2019-05-08 16: 19: 25Z
<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, не должно быть более сложным, чем это.

    
1
2019-05-08 16: 34: 31Z
источник размещен Вот