2009-11-19 90 views
24

Nói rằng tôi có mảng này:Làm thế nào để có được chiều dài của chuỗi dài nhất trong một mảng

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

Tôi muốn để có được độ dài của chuỗi dài nhất trong mảng này. Trong trường hợp này, chuỗi dài nhất là 1234567890 và chiều dài của nó là 10.

Điều này có thể không lặp qua mảng và kiểm tra từng phần tử không?

+0

Sẽ giúp ích nếu chúng tôi đặt ngôn ngữ mà chúng tôi đang làm việc trong tiêu đề của bài đăng. – glyph

Trả lời

92

thử

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

Có ai nói với bạn rằng bạn là thiên tài không ??? –

+0

siêu giống !! cảm ơn! –

+0

@ClickUpvote nó được gọi là lập trình chức năng, và có, nó đẹp. – Tobia

1

Vòng qua các mảng và sử dụng strlen để xác minh nếu chiều dài hiện nay là dài hơn trước .. và lưu các chỉ số của chuỗi dài nhất trong một biến và sử dụng nó sau này khi bạn cần chỉ mục đó.

Something như thế này ..

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

nhưng câu hỏi rõ ràng đã nói "không lặp qua mảng và kiểm tra từng phần tử?" – pavium

+1

cơ bản cơ bản của việc thực hiện một tác vụ như vậy vẫn là "lặp", sử dụng array_map() ví dụ chỉ cần làm cho nó minh bạch cho người dùng. – ghostdog74

+0

nếu bạn muốn nhận được một mục được chỉ định từ một bộ, bạn sẽ luôn phải lặp lại các thiết lập. Bằng cách này hay cách khác. ;) – Ben

4

chắc:

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

Không vòng lặp đó. ;-)

+2

Tuyên bố miễn trừ trách nhiệm: Tôi đã hiểu rằng "không lặp" trong câu hỏi cũng ngụ ý "không đệ quy", nhưng tôi không thể cưỡng lại ... – Heinzi

+0

Câu trả lời hay: P Tôi sẽ bỏ phiếu cho bạn, tôi đã không đạt đến giới hạn bầu cử của mình trong ngày ... – Franz

Các vấn đề liên quan