Возможный дубликат:
Получить максимальное значение из элемента в многомерном массиве?
найти 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.