2017-01-15 6 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); 

は1つのライナーコードです見つけるために多次元配列を使用する必要があります。(あなたがしたいこと)

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

これを1つのライナーとして作成することができます。

+0

だから '$ max = max(array_map($ 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

まあ、私は私はあまり私の例を簡略化さだと思います。私は2つの配列しか持っていません。 'if'文は2つのことではっきりと分かります。 – 3zzy

+0

希望はこれです:) – Asura

0

すべての配列を配列内に格納したいと思うかもしれませんが、私は思っています。

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とcountを併用するほうが良いかもしれません。 –

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) 
関連する問題