如何获取字符串中的最长单词?
例如:
$string = "Where did the big Elephant go?";
返回 "Elephant"
遍历字符串中的单词,同时记录到目前为止最长的单词:
<?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"
?>
可以更加高效一些,但是你已经明白了大意。
$longestWord
而不是 $word
;) - Sampson更新:这里有另一种更短的方法(而且这个方法确实是新的;):
function reduce($v, $p) {
return strlen($v) > strlen($p) ? $v : $p;
}
echo array_reduce(str_word_count($string, 1), 'reduce'); // prints Elephant
与之前发布的相似,但使用 str_word_count
从文本中提取单词(仅通过空格拆分,标点符号也将被计算在内):$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
str_word_count()
。尽管为了简洁起见,我本来会立即将该函数放在对 usort()
的调用中。不过我是 jQuery 约定的奴隶! - Sampsoncreate_function
可以解决这个问题,但是会使事情变得非常冗长。 - Lightness Races in Orbitusort($words, function($a, $b) { /* code */ });
应该没有问题。这是@lonesomeday采用的方法。 - Sampsonstr_word_count
函数放到usort
里面:D 我喜欢直接传递函数,但我仍然倾向于以5.2风格回答问题。这样更通用,那些熟悉PHP 5.3的人应该能够转换它... - Felix Kling<?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;
编辑 如果您想排除标点符号,例如:"Where went the big Elephant?",您可以使用preg_split
:
$words = preg_split('/\b/', $string);
这是一个处理文本非常有用的函数,因此创建一个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
$string ='Where did the big Elephant';
function longestWord($str) {
$str.=" ";
$ex ="";
$max ="";
for($i = 0; $i < strlen($str); $i++)
{
if($str[$i]==" ")
{
if(strlen($ex) > strlen($max))
$max = $ex;
$ex ="";
}else
{
$ex.=$str[$i];
}
}
return $max;
}
echo longestWord($string);
这里有另一个解决方案:
$array = explode(" ",$string);
$result = "";
foreach($array as $candidate)
{
if(strlen($candidate) > strlen($result))
$result = $candidate
}
return $result;
<?php
function getLargestWord($str) {
$strArr = explode(' ', $str); // Split the sentence into an word array
$lrgWrd = ''; // initial value for comparison
for ($i = 0; $i < count($strArr); $i++) {
if (strlen($strArr[$i]) > strlen($lrgWrd)) { // Word is larger
$lrgWrd = $strArr[$i]; // Update the reference
}
}
return $lrgWrd;
}
// Example:
echo getLargestWord('Where did the big Elephant go?');
?>