2009-11-19 38 views
24

Decir que tengo esta matriz:¿Cómo obtener la longitud de cadena más larga en una matriz

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

quiero obtener la longitud de la cadena más larga en esta matriz. En este caso, la cadena más larga es 1234567890 y su longitud es 10.

¿Es esto posible sin recorrer el conjunto y verificar cada elemento?

+0

Nos ayudaría si ponemos el idioma con el que estamos trabajando en el título de la publicación. – glyph

Respuesta

92

tratar

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

¿Alguien te dijo que eres un genio? –

+0

superlike !! ¡Gracias! –

+0

@ClickUpvote se llama programación funcional, y sí, es hermoso. – Tobia

1

bucle a través de las matrices y el uso strlen para verificar si la longitud actual es más largo que el anterior .. y guardar el índice de la cadena más larga de una variable y utilizarla más adelante donde se necesita ese índice.

Algo como esto ..

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

pero la pregunta claramente dice "¿sin recorrer el conjunto y verificar cada elemento?" – pavium

+1

Mecánica básica de hacer una tarea de este tipo sigue siendo "looping", utilizando array_map(), por ejemplo, simplemente hacerla transparente para el usuario. – ghostdog74

+0

si quiere obtener un elemento específico de un conjunto, siempre tendrá que pasar por el conjunto. De una forma u otra. ;) – Ben

4

Claro:

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 hay bucle. ;-)

+2

Descargo de responsabilidad: entendí que "no hay bucle" en la pregunta también implicaba "no recursion", pero no pude resistir ... – Heinzi

+0

Gran respuesta: P Yo te votaría si no hubiera alcanzado mi límite de votos por el dia... – Franz

Cuestiones relacionadas