Как найти самый большой массив из многомерного массива

Возможный дубликат:
Получить максимальное значение из элемента в многомерном массиве?
найти max () определенного значения многомерного массива в php

Я пытаюсь найти самый большой массив из многомерного массива.

Array ( [0] => Array ( [comment] => ayya [commented_on] => 17/03/12 [ckey] => 210029c5d80d8259d1599c9a [username] => pappa [up] => 2 [down] => 0 [vote] => 2 ) [1] => Array ( [comment] => sdfsd [commented_on] => 17/03/12 [ckey] => 08f6a34f96bdeef2903ddaf4 [username] => jesse [up] => 2 [down] => 0 [vote] => 2 ) [2] => Array ( [comment] => 159 [commented_on] => 17/03/12 [ckey] => 4da385124793336339268782 [username] => jesse [up] => 2 [down] => 0 [vote] => 2 ) [3] => Array ( [comment] => s [commented_on] => 17/03/12 [ckey] => 299c77c52ee087e468e23e82 [username] => jesse [up] => 2 [down] => 0 [vote] => 2 ) [4] => Array ( [comment] => jh [commented_on] => 17/03/12 [ckey] => 523c18820d8b8db827a240ad [username] => jesse [up] => 2 [down] => 0 [vote] => 2 ) [5] => Array ( [comment] => jh [commented_on] => 17/03/12 [ckey] => 9f824c11b0ecafcc38c09f4c [username] => jesse [up] => 1 [down] => 1 [vote] => 0 ) [6] => Array ( [comment] => jh [commented_on] => 17/03/12 [ckey] => c97e7ad4d205220c4b8b0332 [username] => jesse [up] => 1 [down] => 0 [vote] => 1 ) ) 

Я бы хотел, чтобы массив имел самые высокие голоса. Самое высокое означает, что массив имеет самый высокий голос

Я использовал следующий код, но он не работает.

 $large=array(); foreach($final2 as $f1){ foreach($final2 as $f2){ if($f1['vote']>$f2['vote']) $large=$f1; } } 

Размер массива AFAIK подсчитывается из числа элементов, которые он имеет.

Так может быть, это поможет

 $largeArraySize = 0; foreach($arraylist as $array) { if(count($array) > $largeArraySize) { $largeArray = $array; } } // Hence $largeArray has the largest print_r($largeArray); 

Если большой массив не придет, этот код займет первое место как самое большое.

Поскольку массив только вложен на один уровень в глубину, и все подмассивы имеют одинаковую структуру, просто проведите по внешнему массиву и отслеживайте максимальное значение, увиденное до сих пор. Ницца и просто.

Без дополнительной информации, такой как массив уже отсортирован по количеству голосов, единственный вариант, который у вас есть, – это линейный поиск O(n) .

 $max = 0; $max_index = 0; if( count($outer_array) > 0 ) { // There are elements in the outer array for($i = 0; $i < count($outer_array); $i++ ) { if( isset($outer_array[$i]["vote"]) ) { if( $outer_array[$i]["vote"] > $max ) { $max_index = $i; } } else { // Error condition, malformed array // Do something here, maybe throw exception? } } } else { // Error condition - outer array is empty, could also throw exception here... $max = -1; // Assume votes cannot be negative $max_index = -1; } if( $max_index != -1 ) { // Success // Do something... } 

Это должно дать вам идею получить наибольшее количество голосов во внутренних массивах:

 $array = array( array('votes' => 2), array('votes' => 3), array('votes' => 0), array('votes' => 1) ); $votes = 0; $key = 0; for($i = 0; $i < count($array); $i++){ if($array[$i]['votes'] > $votes){ $key = $i; $votes = $array[$i]['votes']; } } 

Измените свой код на:

 $large=array('vote' => -1); foreach($final2 as $f1){ if ($f1['vote'] > $large['vote']) { $large=$f1; } } 
 $array = array(.....) $max_votes = 0; foreach ($array as $data) { $vote = $data['vote']; if ($vote > $max_vote) { $max_vote = $vote; } } $max = array(); foreach ($array as $key => $data) { if ($data['vote'] == $max_vote) { $max[] = $key; } } 

$ max теперь будет содержать все массивы с наибольшим количеством голосов, являющимся значением $ max_votes.