从字符串中找出3个最长的单词

时间:2017-01-14 12:53:32

标签: php

我需要添加到此脚本中以从字符串中获取3个最长的单词?

<?php
$text = 'one four eleven no upstairs';
$arr = explode(" ", $text);
$max = $arr[0];

for ($i = 0; $i < count($arr); $i++) {
    if (strlen($arr[$i]) > strlen($max)) {
        $max = $arr[$i];
    }
}

echo $max;
?>

请帮助修改脚本。我们不得使用usort函数。

2 个答案:

答案 0 :(得分:1)

解决方案是这样的:

  • 使用explode()获取数组中字符串的单词
  • &#34;部分&#34;按长度降序排列数组元素
  • 使用简单的adminController循环打印数组中最长的三个单词。

所以你的代码应该是这样的:

for

替代方法:(使用预定义函数)

$text = 'one four eleven no upstairs';
$arr = explode(" ", $text);
$count = count($arr);
for($i=0; $i < $count; $i++){
    $max = $arr[$i];
    $index = $i;
    for($j = $i + 1; $j < $count; ++$j){
        if(strlen($arr[$j]) > strlen($max)){
            $max = $arr[$j];
            $index = $j;
        }
    }
    $tmp = $arr[$index];
    $arr[$index] = $arr[$i];
    $arr[$i] = $tmp;
    if($i == 3) break;
}

// print the longest three words
for($i=0; $i < 3; $i++){
    echo $arr[$i] . '<br />';
}

答案 1 :(得分:1)

你需要创建自己的比较函数并将其传递给数组以使用php函数。 例:

<?php
function lengthBaseSort($first, $second) {
    return strlen($first) > strlen($second) ? -1 : 1;
}

$text = 'one four eleven no upstairs';
$arr = explode(" ", $text);
usort($arr, 'lengthBaseSort');

var_dump(array_slice($arr, 0, 3));

它会从你的陈述中输出3个最长的单词。

根据作者的更改

如果您因某些原因无法使用usort(可能是学校更有用的递归函数)请使用以下代码:

<?php
$text = 'one four eleven no upstairs';
$arr = explode(" ", $text);

function findLongest($inputArray) {
    $currentIndex = 0;
    $currentMax = $inputArray[$currentIndex];
    foreach ($inputArray as $key => $value) {
        if(strlen($value) > strlen($currentMax)){
            $currentMax = $value;
            $currentIndex = $key;
         }
     }
     return [$currentIndex, $currentMax];
}

for($i = 0; $i < 3; $i++) {
    $result = findLongest($arr);
    unset($arr[$result[0]]);
    var_dump($result[1]);
}
?>