字符串中最长的单词

时间:2011-01-04 22:35:08

标签: php string

如何获得字符串中最长的单词?

例如

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

返回"Elephant"

6 个答案:

答案 0 :(得分:15)

循环遍历字符串的单词,跟踪到目前为止最长的单词:

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

可以提高效率,但你明白了。

答案 1 :(得分:9)

更新:这是另一种更短的方式(这个肯定是新的;)):

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

答案 2 :(得分:2)

这个怎么样 - 拆分空格,然后按字符串长度排序,然后抓住第一个:

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

修改如果要排除标点符号,例如:“大象在哪里?”,您可以使用preg_split

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

答案 3 :(得分:0)

这是另一种解决方案:

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

答案 4 :(得分: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

答案 5 :(得分:0)

一种可能的解决方案是在一个通用的分隔符(例如空格)上分割句子,然后遍历每个单词,仅保留对最大单词的引用。

请注意,这将找到第一个大字。

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