2009-11-19 8 views
24

Sagen, ich habe dieses Array:Wie die Länge der längsten Zeichenkette in einer Reihe bekommen

$array[] = 'foo'; 
$array[] = 'apple'; 
$array[] = '1234567890; 

Ich mag in diesem Array die Länge der längsten Zeichenkette erhalten. In diesem Fall ist die längste Zeichenkette 1234567890 und ihre Länge ist 10.

Ist dies möglich, ohne das Array durchzulaufen und jedes Element zu überprüfen?

+0

Es würde helfen, wenn wir die Sprache, mit der wir arbeiten, in den Titel des Posts einbringen. – glyph

Antwort

92

versuchen

$maxlen = max(array_map('strlen', $ary)); 
+17

Hat dir jemand gesagt, dass du ein Genie bist ??? –

+0

superlike !! Vielen Dank! –

+0

@ClickUpvote heißt es funktionale Programmierung, und ja, es ist schön. – Tobia

1

Schleife durch die Felder und verwenden strlen, um zu überprüfen, ob die aktuelle Länge, die länger ist als die vorherige .. und den Index der längsten Zeichenfolge in einer Variablen speichern und später verwenden, wo Sie brauchen dieser Index.

So etwas ..

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

aber die Frage klar gesagt "ohne das Array durchlaufen und jedes Element zu überprüfen?" – pavium

+1

grundlegende Mechanik der Durchführung einer solchen Aufgabe ist immer noch "looping", mit array_map() zum Beispiel nur für den Benutzer transparent machen. – ghostdog74

+0

Wenn Sie ein bestimmtes Element aus einem Set abrufen möchten, müssen Sie immer durch das Set gehen. So oder so. ;) – Ben

4

Sure:

function getmax($array, $cur, $curmax) { 
    return $cur >= count($array) ? $curmax : 
    getmax($array, $cur + 1, strlen($array[$cur]) > strlen($array[$curmax]) 
      ? $cur : $curmax); 
} 

$index_of_longest = getmax($my_array, 0, 0); 

Nein, es Schleife. ;-)

+2

Disclaimer: Ich habe verstanden, dass "keine Schleife" in der Frage auch "keine Rekursion" impliziert, aber ich konnte nicht widerstehen ... – Heinzi

+0

Große Antwort: P Ich würde Sie stimmen, hatte ich nicht meine Stimmgrenze erreicht für den Tag... – Franz

Verwandte Themen