PHP - String Snippets: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „== Überflüssige Whitespace entfernen == <syntaxhighlight lang="php"> <?php $str = 'foo o'; $str = preg_replace('/\s\s+/', ' ', $str); // This will be 'foo…“)
 
Zeile 6: Zeile 6:
 
// This will be 'foo o' now
 
// This will be 'foo o' now
 
echo $str;
 
echo $str;
 +
?>
 +
</syntaxhighlight>
 +
== Zeilenumbruch einfügen ==
 +
string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] )
 +
== Text kürzen ==
 +
=== Auf Wortende kürzen ===
 +
<syntaxhighlight lang="php">
 +
function limit_words($words, $limit, $append = ' &hellip;') {
 +
  $limit = $limit+1;
 +
  $words = explode(' ', $words, $limit+1);
 +
  array_pop($words); // Shorten the array by 1 because that final element will be the sum of all the words after the limit
 +
  $words = implode(' ', $words) . $append;
 +
  return $words;
 +
}
 +
</syntaxhighlight>
 +
=== Auf Satzende kürzen ===
 +
<syntaxhighlight lang="php">
 +
<?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 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 < $max_char)
 +
{
 +
$sentences[] = $part;
 +
}
 +
}
 +
 +
    // return the shortened story as a string
 +
    return implode(" ", array_slice($sentences, $start, $limit));
 +
    }
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>

Version vom 3. Mai 2017, 07:39 Uhr

Überflüssige Whitespace entfernen

<?php
$str = 'foo   o';
$str = preg_replace('/\s\s+/', ' ', $str);
// This will be 'foo o' now
echo $str;
?>

Zeilenumbruch einfügen

string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] )

Text kürzen

Auf Wortende kürzen

function limit_words($words, $limit, $append = ' &hellip;') {
  $limit = $limit+1;
  $words = explode(' ', $words, $limit+1);
  array_pop($words); // Shorten the array by 1 because that final element will be the sum of all the words after the limit
  $words = implode(' ', $words) . $append;
  return $words;
}

Auf Satzende kürzen

<?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 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 < $max_char)
			{
			$sentences[] = $part;
			}
		}

    // return the shortened story as a string
    return implode(" ", array_slice($sentences, $start, $limit));
    }
?>