2017-01-14 3 views
-3

Was muss ich diesem Skript hinzufügen, um 3 längste Wörter aus der Zeichenfolge zu erhalten?Finden Sie die 3 längsten Wörter aus der Zeichenfolge

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

Bitte helfen Sie das Skript zu ändern. Wir müssen die usort Funktion nicht verwenden.

+0

warum kann‘ nst du diese Funktionen, ist das für die Schule? –

+0

Ja, das ist für die Schule. –

Antwort

1

Die Lösung wäre so aussehen:

  • Verwenden explode() die Worte des Strings in einem Array
  • „Teilweise“, um sortieren Sie die Array-Elemente in absteigender Reihenfolge der Länge
  • Verwendung eines einfachen for Schleife, um die längsten drei Wörter aus dem Array zu drucken.

So sollte der Code wie folgt sein:

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

Alternative Methode: (mit vordefinierten Funktionen)

$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

Sorry, ich habe vergessen zu schreiben - wir haben keine Funktionen wie sort, array_slice ... nur um meinen Code oben zu ändern. –

+0

@Sven Ich habe meine Antwort vollständig aktualisiert. Bitte testen Sie Ihre Anwendung mit den aktualisierten Code-Snippets. –

+0

danke! Aber es wäre gut, wenn es einfacher wäre, –

1

Sie benötigen eine eigene Vergleichsfunktion zu erstellen und geben es mit Array zur Verwendung der PHP-Funktion. Bsp .:

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

Es wird Ausgang 3 längste Wörter aus Ihrer Aussage.

Nach Autor ändert:

Wenn Sie keine Möglichkeit haben, aus irgendwelchen Gründen verwenden usort (kann für die Schule sinnvoller eine rekursive Funktion sein), verwenden Sie folgenden Code:

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

Entschuldigung, ich habe oben einige Bedingungen hinzugefügt. –

+0

Wir haben keine Funktion usort verwendet. –

+0

Können Sie ohne Usort zeigen? –

Verwandte Themen