2017-01-15 5 views
1
$arr1 = [1,2,3]; 
$arr2 = [1,2,3,4]; 
$arr3 = [1,2,3,4,5]; 

echo max(count($arr1), count($arr2), count($arr3)); // returns 5 

с max Я получаю счет, но не знаю, какой массив больше. Как получить ссылку на массив большего размера ($arr3 в этом случае)?Получение большего массива

ответ

6

Вы должны использовать многомерный массив для хранения всех массивов, то, проходное многомерного массива и найти самый большой массив,

$lgArraySize = 0; // used for comparing the size of array 
$lgArray = array(); // used to store reference of largest array 

foreach($arraylist as $array) { 
    if(count($array) > $largeArraySize) { 
     $lgArray = &$array; 
     $lgArraySize = count($array); 
    } 
} 

print_r($largeArray); 

Вот код один лайнер. (Что вы хотите)

function findMax($row){ 
    return count($row); 
} 
$maxArrayPos = array_search(max(array_map("findMax", $multi)), array_map("findMax", $multi)); 
print_r($multi[$maxArrayPos]); 

Вы можете сделать это как один вкладыш.

+0

Итак '$ max = max (array_map (function ($ row) {return count ($ row);}, [$ arr1, $ arr2]));'? Но он все равно будет печатать 'count', а не массив, верно? – 3zzy

+0

@ 3zzy проверить решение, теперь он будет печатать первый по величине массив, который у вас есть. Во-первых, потому что, если у вас много массивов одинаковой длины, тогда он будет печатать первый. –

2

Лучше использовать индексы для таких массивов, чтобы обход был простым. Вы можете получить ссылку на больший массив следующим образом -

$arr; 
$arr[0] = [6,2,1,12,32,11]; 
$arr[1] = [1,2,3,4]; 
$arr[2] = [1,2,3,4,4,4,1,1,1,1]; 
$count = -1;//will hold max count 
$big;//larger array will be stored here 

foreach ($arr as $key => $value) { 
    $curCount = count($arr[$key]);//curCount holds current array size 
//checking for biggest array count 
    if($curCount>$count){ 
    $count = $curCount; 
    $big = &$arr[$key]; 
    } 
} 
var_dump($big); 

Может быть, логика слишком громоздким, хотя!

+0

Ну, я думаю, что я упростил мой пример слишком много. У меня нет только двух массивов. Утверждение 'if' довольно очевидно для двух. – 3zzy

+0

Надеюсь, что это трюк :) – Asura

0

Возможно, вам понравится хранить все массивы внутри массива и хотел бы сделать foreach, я думаю.

function max_length($array) { 
    $max = 0; 
    foreach($array as $child) { 
     if(count($child) > $max) { 
      $max = count($child); 
     } 
    } 
    return $max; 
} 

проверка this почему это лучший подход.

+0

Спасибо, но производительность для меня не проблема, просто нужен элегантный лайнер! ;) – 3zzy

+0

, чем вы можете использовать array_map со счетом. –

2

Попробуйте это:

function laregr(){ 
    $numargs = func_num_args(); 
    $large_array = array(); 
    if($numargs){ 
     $arg_list = func_get_args(); 
     $max = 0;  
     foreach($arg_list as $arg){ 
      if(is_array($arg)){ 
       $big = count($arg);   
       if($big >= $max){ 
        $max = $big;     
        $large_array = $arg; 
       } 
      } 
     } 
    } 
    return $large_array; 
} 

$arr1 = [1,2,3,4,5,6]; 
$arr2 = [1,2,3,4,5]; 
$arr4 = [1,2,3,4, 5,6,7]; 

$max_array = laregr($arr1, $arr2, $arr4); // large($arr1, ...) 
print_r($max_array); 
1

Является ли это то, что вам нужно?

$arr1 = [1,2,3]; 
$arr2 = [1,2,3,4]; 
$arr3 = [1,2,3,4,5]; 

$countmax = [ 
    "arr1" => $arr1, 
    "arr2" => $arr2, 
    "arr3" => $arr3, 
]; 

$value = max($countmax); 
print_r($value); 

Oputput:

Array ([0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5) 
Смежные вопросы