Huhu Ashura
[... vorgekaut ...]
Und? Der Lerneffekt bei solchen Antworten tendiert Richtung Null.
Mmmmh, jetzt traue ich mich fast nicht mehr ....
.... aber nur fast ;-)
Da ich die Aufgabenstellung ganz erquicklich fand und ich ein wenig gebastelt habe möchte ich diese meine fertige Lösung jetzt auch noch loswerden.
Da ich einige etwas exotischere Funktionen "verbraten" habe gibt es ja vielleicht doch einen kleinen Lerneffekt.
Naja, mir hat es jedenfalls Spass gemacht.
<?php
$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));
?>
Gute Nacht
lulu
bythewaythewebsuxgoofflineandenjoytheday