Grow your CSS skills. Land your dream job.

Last updated on:

Truncate String by Words

Technique #1

<?php
function trunc($phrase, $max_words) {
   $phrase_array = explode(' ',$phrase);
   if(count($phrase_array) > $max_words && $max_words > 0)
      $phrase = implode(' ',array_slice($phrase_array, 0, $max_words)).'...';
   return $phrase;
}
?>

Technique #2

function limit_words($words, $limit, $append = ' &hellip;') {
       // Add 1 to the specified limit becuase arrays start at 0
       $limit = $limit+1;
       // Store each individual word as an array element
       // Up to the limit
       $words = explode(' ', $words, $limit);
       // Shorten the array by 1 because that final element will be the sum of all the words after the limit
       array_pop($words);
       // Implode the array for output, and append an ellipse
       $words = implode(' ', $words) . $append;
       // Return the result
       return $words;
}

Comments

  1. Permalink to comment#

    Which is better on a high traffic site?

  2. Instead only words, this works for sentences.
    So no half sentences anymore:

    <?php
    
    function substr_sentence($string, $start=0, $limit=10, $max_char = 300)
        {
        /* This functions cuts a long string in sentences.
        *
        * substr_sentence($string, $start, $limit);
        * $string = 'A example. By someone that loves PHP. Do you? We do!';
        * $start = 0; // we would start at the beginning
        * $limit = 10; // so, we get 10 sentences (not 10 words or characters!)
        *
        * It's not as substr()) in single characters.
        * It's not as substr_words() in single words.
        * 
        * No more broken lines in a story. The story/article must go on!
        *
        * Written by Eddy Erkelens "Zunflappie"
        * Published on www.mastercode.nl 
        * May be free used and adapted
        *
        */
        
        // list of sentences-ends. All sentences ends with one of these. For PHP, add the ;
        $end_characters = array(
                    '.', 
                    '?',
                    '!'
                    );
        
        // put $string in array $parts, necessary evil
        $parts = array($string);            
            
        // foreach interpunctation-mark we will do this loop
        foreach($end_characters as $end_character)
            {
            // go thru each part of the sentences we already have
            foreach($parts as $part)
                {
                // make array with the new sentences
                $sentences[] = explode($end_character, $part);
                }
            
            // unfortunately explode() removes the end character itself. So, place it back
            foreach($sentences as $sentence)
                {
                // some strange stuff
                foreach($sentence as $real_sentence)
                    {
                    // empty sentence we do not want
                    if($real_sentence != '')
                        {
                        // if there is already an end-character, dont place another one
                        if(in_array(substr($real_sentence, -1, 1), $end_characters))
                            {
                            // store for next round
                            $next[] = trim($real_sentence);        
                            }
                        else
                            {
                            // store for next round
                            $next[] = trim($real_sentence).$end_character;    
                            }
                        }
                    }
                }
                
            // store for next round
            $parts = $next;
            
            // unset the remaining and useless stuff
            unset($sentences, $sentence, $next);
            }    
    
        // check for max-char-length
        $total_chars = 0;
        $sentence_nr = 0;
        $sentences = array();
        
        // walk thru each member of $part
        foreach($parts as $part)
            {
            // count the string-lenght and add this to $total_chars
            $total_chars += strlen($part);
            
            // if $total-chars is higher then max-char, dont add this sentences!
            if($total_chars 
    • dB
      Permalink to comment#

      @ Eddy Erkelens. Your solution is really interesting. Could you post the full code of the function because it got cut on the part if($total_chars…

  3. Here is it:
    A little bit late, but i did need the function again, for myself

    <?php

    function substr_sentence($string, $start=0, $limit=10, $max_char = 600)
    {
    /* This functions cuts a long string in sentences.
    *
    * substr_sentence($string, $start, $limit);
    * $string = 'A example. By someone that loves PHP. Do you? We do!';
    * $start = 0; // we would start at the beginning
    * $limit = 10; // so, we get 10 sentences (not 10 words or characters!)
    *
    * It's not as substr()) in single characters.
    * It's not as substr_words() in single words.
    *
    * No more broken lines in a story. The story/article must go on!
    *
    * Written by Eddy Erkelens "Zunflappie"
    * Published on http://www.mastercode.nl
    * May be free used and adapted
    *
    */

    // list of sentences-ends. All sentences ends with one of these. For PHP, add the ;
    $end_characters = array(
                '. ', 
                '? ',
                '! '
                );
    
    // put $string in array $parts, necessary evil
    $parts = array($string);            
    
    // foreach interpunctation-mark we will do this loop
    foreach($end_characters as $end_character)
        {
        // go thru each part of the sentences we already have
        foreach($parts as $part)
            {
            // make array with the new sentences
            $sentences[] = explode($end_character, $part);
            }
    
        // unfortunately explode() removes the end character itself. So, place it back
        foreach($sentences as $sentence)
            {
            // some strange stuff
            foreach($sentence as $real_sentence)
                {
                // empty sentence we do not want
                if($real_sentence != '')
                    {
                    // if there is already an end-character, dont place another one
                    if(in_array(substr($real_sentence, -1, 1), $end_characters))
                        {
                        // store for next round
                        $next[] = trim($real_sentence);        
                        }
                    else
                        {
                        // store for next round and add the removed character
                        $next[] = trim($real_sentence).$end_character;    
                        }
                    }
                }
            }
    
        // store for next round
        $parts = $next;
    
        // unset the remaining and useless stuff
        unset($sentences, $sentence, $next);
        }    
    
    // check for max-char-length
    $total_chars = 0;
    $sentence_nr = 0;
    $sentences = array();
    
    // walk thru each member of $part
    foreach($parts as $part)
        {
        // count the string-lenght and add this to $total_chars
        $total_chars += strlen($part);
    
        // if $total-chars not already higher then max-char, add this sentences!
        if($total_chars 
    

  4. And the last part… apart.


    // walk thru each member of $part
    foreach($parts as $part)
    {
    // count the string-lenght and add this to $total_chars
    $total_chars += strlen($part);

        // if $total-chars not already higher then max-char, add this sentences!
        if($total_chars 
    

  5. Bloody bug…

    It get cuts of on a ARROW_LEFT..

    So: codepad to the rescue. Sorry Chris.
    Link: http://codepad.org/AqIL9V4N

    And a substr_words() : http://codepad.org/jCLTm1zJ

  6. And a sencents-counter: http://codepad.org/o9I3zdI9

    All together, you can count sentences of a long text.
    Then cut it in half (use ceil() or abs()).
    Slice it with substr_sentences() and there you go.

Leave a Comment

Posting Code

  • Use Markdown, and it will escape the code for you, like `<div class="cool">`.
  • Use triple-backticks for blocks of code.
    ``` 
    <div>
      <h1>multi-line block of code</h1>
      <span>be cool yo.</span>
    </div>
    ```
  • Otherwise, escape your code, like <code>&lt;div class="cool"&gt;</code>. Markdown is just easier though.

Current ye@r *

*May or may not contain any actual "CSS" or "Tricks".