phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?Re:_=5Bphp=5D_Text_k=FCrzer?=

[php] Re: [php] Text kürzer

Matthias Luedtke php_(at)_phpcenter.de
Sun, 29 Apr 2001 11:52:07 +0200


Hallo Benjamin,

> Ich habe in meiner Datenbank ein Textfeld, von dem ich nur die ersten
> 100 Zeichen auslesen will, es soll aber nicht mitten im Wort aufhören.

haettest du ein wenig im Archiv herumgestobert, waere dir der Thread "string
kuerzen" von letzter Woche aufgefallen.
Dort habe ich eine Loesung vorgestellt. Aber weil ich ja garnicht so bin,
hier noch einmal das Ganze:

function is_word_end ($c)
/*
 Ueberprueft, ob der Buchstabe das Ende eines Wortes ist.

 Rueckgabewert:
       0, wenn es sich um einen normalen Buchstaben handelt
       1, wenn es das Ende eines Wortes ist (Leerzeichen oder , . ? ! ;)
      -1, wenn kein einzelner Buchstabe uebergeben wurde

*/
{

  // Ist der Parameter wirklich ein Buchstabe?
  if (!is_string ($c))
    return -1;
  if (strlen ($c) != 1)
    return -1;

  // Diese Zeichen Werden als Wortende akzeptiert
  $signs = array (',',
                  '.',
                  '?',
                  '!',
                  ';',
                  ' ');

  // Ueberpruefen der einzelnen Zeichen
  for ($i = 0; $i < count($signs); ++$i)
    if ($c == $signs[$i])
      return 1;

  return 0;
}

function StrShorten ($str, $num_chars)
/*
 Kuerzt $str auf $num_chars und nimmt ggf. noch Zeichen mit,
 damit ein Wort nicht in der Mitte abgeschnitten wird.

 Rueckgabewert:
       $str mit einer Laenge von $num_chars + (maximal 20) zusaetzlichen
Zeichen
*/
{
  // Wurden die richtigen Parameter uebergeben?
  if (!is_string ($str))
    return;
  if (!is_int ($num_chars))
    return;

  // Es muessen mehr als 0 Buchstaben abgeschnitten werden
  if ($num_chars < 1)
    return;

  // Abschneiden der ersten &num_char Woerter
  $ret = substr ($str, 0, $num_chars);

  // Wenn der String kleiner als $num_char ist, wird er direkt ausgegeben
  if ($num_chars > strlen($str))
    return $ret;

  $added_chars = 0;
  while (is_word_end (substr($ret, -1)) != 1 && $added_chars++ < 20)
      $ret = $ret.substr($str, $num_chars++, 1);

  return $ret;
}

Einfach StrShorten ($dein_super_string, $anzahl_der_zeichen) aufrufen und
gluecklich sein.


> Ist das möglich?

Prinzipiell ist _alles_ moeglich. Naja, fast jedenfalls... ;-)

Gruss,
   Matthias

--
Matthias Luedtke, matthias-luedtke_(at)_gmx.de
Afgrnd der Ensparngsmassnhmen bei den Onlne-Kostn ist ab sfort in jedm Wrt
von mhr als dri Buchstabn mindestns ein Vkal wegzlassn.



php::bar PHP Wiki   -   Listenarchive