2011-01-04 12 views
4

Wie kann ich das längste Wort in einer Zeichenfolge abrufen?Längstes Wort in einer Zeichenfolge

Eg.

$string = "Where did the big Elephant go?"; 

"Elephant"

+8

Was Sie bisher versucht haben? Während jemand dir die Antwort geben kann, wirst du viel mehr lernen, wenn du zuerst etwas ausprobierst. (Und Sie werden wahrscheinlich viel bessere Antworten bekommen, wenn Sie zeigen, dass Sie darüber nachgedacht haben.) – JasCav

Antwort

12

Schleife durch die Worte des Strings zurückzukehren, der längste Wort die Verfolgung so weit:

<?php 
$string = "Where did the big Elephant go?"; 
$words = explode(' ', $string); 

$longestWordLength = 0; 
$longestWord = ''; 

foreach ($words as $word) { 
    if (strlen($word) > $longestWordLength) { 
     $longestWordLength = strlen($word); 
     $longestWord = $word; 
    } 
} 

echo $longestWord; 
// Outputs: "Elephant" 
?> 

ein wenig effizienter gemacht werden kann, aber Sie bekommen die Idee.

+3

Sie haben das in 15 Sekunden geschrieben ?! – JakeParis

+4

@JMCCreative: Ich bin ziemlich genial. –

+0

heh du hast fast genau das geschrieben was ich geschrieben habe ... aber schneller haha. – dqhendricks

2

Wie über diese - Split auf Räume, dann sortieren nach der String-Länge, die und greifen zuerst:

<?php 

$string = "Where did the big Elephant go?"; 

$words = explode(' ', $string); 

usort($words, function($a, $b) { 
    return strlen($b) - strlen($a); 
}); 

$longest = $words[0]; 

echo $longest; 

bearbeiten Wenn Sie Interpunktion ausschließen möchten, zum Beispiel: „Wo ging der große Elefant“, könnten Sie preg_split verwenden:

$words = preg_split('/\b/', $string); 
+0

Scheint unnötig komplex für keinen Leistungsgewinn. –

+0

@Tomalak In der Tat ist es ein bisschen langsamer. Dennoch ist es eine alternative, vielleicht sogar schönere Lösung. – lonesomeday

0

Hier ist eine andere Lösung:

$array = explode(" ",$string); 
$result = ""; 
foreach($array as $candidate) 
{ 
if(strlen($candidate) > strlen($result)) 
$result = $candidate 
} 
return $result; 
9

Update: Hier ist ein weiterer noch kürzerer Weg (und dies ist auf jeden Fall neu;)):

function reduce($v, $p) { 
    return strlen($v) > strlen($p) ? $v : $p; 
} 

echo array_reduce(str_word_count($string, 1), 'reduce'); // prints Elephant 

ähnlich wie bereits geschrieben, aber mit str_word_count die Worte zu extrahieren (durch nur auf Leerzeichen aufteilend, werden Interpunktionszeichen auch gezählt):

$string = "Where did the big Elephant go?"; 

$words = str_word_count($string, 1); 

function cmp($a, $b) { 
    return strlen($b) - strlen($a); 
} 

usort($words, 'cmp'); 

print_r(array_shift($words)); // prints Elephant 
+0

+1 für die Verwendung von 'str_word_count()'. Ich hätte die Funktion jedoch sofort in den Aufruf von 'usort()' platziert, um es kurz zu machen. Ich bin ein Sklave von jQuery Konventionen! – Sampson

+0

@ Jonathan Sampson: Aber dann habe ich keinen Bezug auf das Array ... –

+0

Ich mag nicht die Notwendigkeit, eine Funktion zu erstellen (und verschmutzen die Symboltabelle) obwohl! 'create_function' würde das beheben, aber dann sind die Dinge sehr ausführlich. –

0

Dieses ist eine ziemlich nützliche Funktion tion, wenn sie mit Text zu tun, so dass es eine gute Idee sein könnte, eine PHP-Funktion zu diesem Zweck zu erstellen:

diese Funktion
function longestWord($txt) { 
    $words = preg_split('#[^a-z0-9áéíóúñç]#i', $txt, -1, PREG_SPLIT_NO_EMPTY); 
    usort($words, function($a, $b) { return strlen($b) - strlen($a); }); 
    return $words[0]; 
} 
echo longestWord("Where did the big Elephant go?"); 
// prints Elephant 

Test hier: http://ideone.com/FsnkVW

Verwandte Themen