2009-11-19 17 views
24

Dire che ho questa matrice:Come ottenere la lunghezza della più lunga stringa in un array

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

voglio ottenere la lunghezza della stringa più lunga in questo array. In questo caso la stringa più lunga è 1234567890 e la sua lunghezza è 10.

Ciò è possibile senza eseguire il ciclo attraverso la matrice e controllando ogni elemento?

+0

Sarebbe utile se mettessimo la lingua con cui stiamo lavorando nel titolo del post. – glyph

risposta

92

provare

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

Qualcuno ti ha detto che sei un genio ??? –

+0

superlike !! Grazie! –

+0

@ClickUpvote si chiama programmazione funzionale, e sì, è bellissimo. – Tobia

1

loop attraverso gli array e utilizzare strlen per verificare se la lunghezza attuale è più lungo del precedente .. e salvare l'indice della stringa più lunga in una variabile e utilizzarla in seguito in cui è necessario quell'indice

Qualcosa di simile ..

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

ma la domanda diceva chiaramente "senza eseguire il ciclo attraverso la matrice e controllando ogni elemento?" – pavium

+1

I meccanismi di base per eseguire tale compito sono ancora "in loop", usando array_map() per esempio rendilo trasparente all'utente. – ghostdog74

+0

se si desidera ottenere un elemento specificato da un set, sarà sempre necessario scorrere il set. In un modo o nell'altro. ;) – Ben

4

Certo:

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

No occhiello. ;-)

+2

Disclaimer: ho capito che "no looping" nella domanda implicava anche "nessuna ricorsione", ma non potevo resistere ... – Heinzi

+0

Ottima risposta: P Ti voterei, se non avessi raggiunto il mio limite di voto per il giorno... – Franz

Problemi correlati