Самое длинное слово в строке - PullRequest
4 голосов
/ 05 января 2011

Как я могу получить самое длинное слово в строке?

Например.

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

Для возврата "Elephant"

Ответы [ 5 ]

15 голосов
/ 05 января 2011

Перебирайте слова строки, отслеживая самое длинное слово:

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

Можно сделать немного более эффективным, но вы поняли идею.

9 голосов
/ 05 января 2011

Обновление: Вот еще один более короткий путь (и этот, безусловно, новый;)):

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 голосов
/ 05 января 2011

Как насчет этого - разбить на пробелы, затем отсортировать по длине строки и взять первое:

<?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);
0 голосов
/ 17 февраля 2016

Это очень полезная функция при работе с текстом, поэтому было бы неплохо создать функцию 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

0 голосов
/ 05 января 2011

Вот еще одно решение:

$array = explode(" ",$string);
$result = "";
foreach($array as $candidate)
{
if(strlen($candidate) > strlen($result))
$result = $candidate
}
return $result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...