2009-11-19 91 views
24

說我有此數組:如何獲得最長的字符串的長度在一個陣列

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

我想在此數組中最長的字符串的長度。在這種情況下最長的字符串是1234567890並且其長度是10

這是可能的,而不通過陣列循環並檢查每個元件?

+0

如果我們將我們正在使用的語言放在帖子的標題中,這將有所幫助。 – glyph 2013-05-08 15:30:19

回答

92

嘗試

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

有沒有人告訴你你是個天才? – 2009-11-19 10:18:00

+0

超級喜歡!!謝謝! – 2013-12-09 10:20:05

+0

@ClickUpvote它被稱爲函數式編程,是的,它很漂亮。 – Tobia 2016-11-14 17:36:32

1

循環遍歷數組和使用strlen來驗證當前長度長於以前的..並保存最長的字符串的索引一個變量,使用它後,你需要該指數。

事情是這樣的..

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

但問題清楚地表示「沒有循環遍歷數組並檢查每個元素?」 – pavium 2009-11-19 10:12:24

+1

做這樣一個任務的基本機制仍然是「循環」,例如使用array_map()使其對用戶透明。 – ghostdog74 2009-11-19 10:16:27

+0

如果你想從一個集合中獲得一個指定的項目,你將永遠必須遍歷該集合。以這種或那種方式。 ;) – Ben 2009-11-19 10:46:59

4

肯定的:

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 2009-11-19 10:28:37

+0

大答案:P 我會投你了,如果我沒有達到我的投票限制當天... – Franz 2009-11-19 11:12:18

相關問題