2009-11-19 6 views
24

Скажем, у меня есть этот массив:Как получить длину длинной строки в массиве

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

Я хочу, чтобы получить длину самой длинной строки в этом массиве. В этом случае самая длинная строка равна 1234567890, а ее длина равна 10.

Возможно ли это, не зацикливая массив и проверяя каждый элемент?

+0

Это поможет, если мы поместим язык, с которым мы работаем, в заголовке сообщения. – glyph

ответ

92

попробовать

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

Кто-нибудь сказал вам, что вы гений ??? –

+0

супер похоже !! благодаря! –

+0

@ClickUpvote это называется функциональным программированием, и да, это красиво. – Tobia

1

Loop через массивы и использовать strlen, чтобы проверить, если текущая длина больше, чем предыдущий .. и сохранить индекс длинной строки в переменной и использовать его позже, когда вам нужно этот индекс.

Что-то вроде этого ..

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

, но вопрос ясно сказал: «Без перебора массива и проверки каждого элемента?» – pavium

+1

Основная механика выполнения такой задачи по-прежнему «зацикливается», используя массив array_map(), например, просто делает ее прозрачной для пользователя. – ghostdog74

+0

, если вы хотите получить заданный элемент из набора, вам всегда придется пройти через набор. Так или иначе. ;) – 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); 

Нет петли там. ;-)

+2

Отказ от ответственности: Я действительно понимал, что «отсутствие петли» в вопросе также подразумевает «отсутствие рекурсии», но я не мог удержаться ... – Heinzi

+0

Отличный ответ: P Я бы проголосовал за вас, если бы я не достиг своего предела голосования На день... – Franz

Смежные вопросы