2017-01-14 18 views
-3

文字列から最長3単語を得るには、このスクリプトに何を追加する必要がありますか?文字列から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機能を使用しないでください。

+0

をあなたはこれらの機能を使用していますが、これは学校向けですか? –

+0

はい、これは学校向けです。 –

答えて

1

ソリューションは次のようになります:

  • 使用explode()は、配列内の文字列の単語を取得するために
  • 「一部」の長さの降順
  • 使用シンプルな中に配列要素を並べ替えますforループは、配列から最長の3ワードを出力します。

だからあなたのコードは次のようにする必要があります:

$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 />'; 
} 

代替方法:(事前に定義された関数を使用)

$text = 'one four eleven no upstairs'; 
$arr = explode(" ", $text); 
usort($arr,function($a, $b){ 
    return strlen($b)-strlen($a); 
}); 
$longest_string_array = array_slice($arr, 0, 3); 

// display $longest_string_array 
var_dump($longest_string_array); 
+0

申し訳ありませんが、書くのを忘れています - sort、array_sliceなどの関数を使用していません...上記のコードを変更するだけです。 –

+0

@Sven私は自分の答えを完全に更新しました。更新されたコードスニペットでアプリケーションをテストしてください。 –

+0

ありがとう!しかし、それがより簡単であれば良いだろう,,, –

1

独自の比較関数を作成し、それを渡す必要がありますusort 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]); 
} 
?> 
+0

申し訳ありませんが、私は上記のいくつかの条件を追加しました。 –

+0

関数usortは使用していません。 –

+0

ソートなしで表示できますか? –

関連する問題