Längstes Wort
Ermittelt das längste Wort in einem Text
|
Script: |
<?php
/**
* Das längste Wort in einem Textabschnitt ermitteln.
*/
// Umlaute sollen natürlich mit berücksichtigt werden ...
setlocale(LC_ALL, 'de_DE@euro');
$text = 'Das ist doch sehr einfach mit dem längsten Wort, oder?
Da kann man einen regulären Ausdruck benutzen.
Oder wir erzeugen ein Array durch extrahieren sämtlicher Worte aus diesem Text
und sortieren das Array einfach nach der Länge der Zeichenketten.
Oder wir wenden die Funktion array_filter an um alle Worte rauszuschmeißen die eine
vorgegebene Länge überschreiten. Solange der Text nicht zu lang wird sollte das
auch einigermassen resourcenschonend funktionieren, aber wehe wenn man da
z.B. Krieg und Frieden reinsteckt ...';
$max_length = 12;
// per RegExp gucken ob ein so langes Wort enthalten ist ...
if (preg_match('#\w{'.$max_length.'}#', $text)){
printf ('Ja, da ist ein Wort mindestens %d Zeichen lang.', $max_length);
}
echo '<hr>';
// ok, warum nicht die Treffer gleich ausgeben ...
if (preg_match_all('#(\b\w{'.$max_length.',}\b)#', $text, $matches)){
printf ('Ja, da ist mindestens ein Wort %d Zeichen oder länger. Und zwar:<ul><li>%s</li></ul>',
$max_length,
join('</li><li>', $matches[1])
);
}
echo '<hr>';
// aber warum einfach wenn es auch umständlich geht ...
$words = preg_split('#\W+#', $text);
$xxl = array_filter($words, create_function('$v',"return strlen($v) >= $max_length;"));
printf ('Ja, da ist mindestens ein Wort %d Zeichen oder länger. Und zwar:<ul><li>%s</li></ul>',
$max_length, join('</li><li>', $xxl)
);
echo '<hr>';
// mit array_map bekommen wir leicht die Länge sämtlicher Strings ...
$lengths = array_map ('strlen', $words);
printf('Das Längste Wort enthält übrigens %d Zeichen', max($lengths));
// jetzt wollen wir zum Abschluss noch alle Wörter hübsch geordnet haben ...
array_multisort($lengths,SORT_DESC,$words);
printf ('<h1>Alle Worte nach Länge absteigend geordnet</h1><ul><li>%s</li></ul>',
join('</li><li>',
$words)
);
?>
|
|