2011-01-04 19 views
4

文字列の中で最も長い単語を得るにはどうすればよいですか?文字列の中で最も長い単語

例:文字列の言葉を通じて"Elephant"

+8

あなたがこれまでに試してみましたか?誰かがあなたに答えを与えるかもしれないが、あなたが最初に何かを試してみるともっと多くを学ぶだろう。 (そして、あなたがそれに何らかの考えを入れたことを示すならば、より良い答えを得る可能性が高くなります。) – JasCav

答えて

12

ループを返すために、

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

、これまでの最長の単語を追跡する:

<?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" 
?> 

はもう少し効率的に行うことができますが、あなたが得ますアイディア。あなたは、たとえば、句読点を除外したい場合は

<?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; 

編集:「どこスペースに分割し、ソート文字列の長さによって、最初をつかむ - これについて

+3

あなたは15秒でそれを書きましたか? – JakeParis

+4

@JMCCreative:私はかなり素晴らしいです。 –

+0

あなたはほとんど正確に私が書いたものを書いた...しかし、より速い笑。 – dqhendricks

2

方法?大きな象を行ってきました」、あなたはpreg_splitを使用することができます。ここでは

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

性能向上のために不必要に複雑に見えます。 –

+0

@Tomalak実際、かなり遅いです。それでも、これは代替案、恐らくもっときれいなソリューションです。 – lonesomeday

0

は別のソリューションです。

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

アップデート:ここでは別のさらに短い道(とこの1つは間違いなく新しいです;)です):

既に(で掲載が、単語を抽出するために str_word_countを使用して同様の
function reduce($v, $p) { 
    return strlen($v) > strlen($p) ? $v : $p; 
} 

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

スペースで区切るだけで句読点もカウントされます)。

$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は 'str_word_count()'を使っています。私は関数を 'usort()'の呼び出しの中に置いて、簡潔にしたいと思います。私はjQueryの慣習に従う! – Sampson

+0

@ジョナサン・サンプソン:しかし、私は配列への参照がありません... –

+0

私は関数を作成する必要がありません(とシンボルテーブルを汚染する)! 'create_function'はそれを修正しますが、その後は非常に冗長です。 –

0

これは非常に便利な機能ですション、その目的のためにPHPの関数を作成するのは良い考えかもしれませんので、テキストを扱う:

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 

テストここでは、この機能:http://ideone.com/FsnkVW