2016-08-14 119 views
-1

我想根據它包含的值的數量來確定哪個數組是最大和最小的。查找具有最大和最小元素數的數組

例如:

$array=[ 
"subarray1"=>[1] 
"subarray2"=>[1,2,3,4,5,6,7,8] 
"subarray3"=>[1,2,3,4] 
]; 

max_elements($陣列)返回subarray2min_elements($陣列)返回subarray1

確實PHP具有可以選擇陣列中的任何功能大多數元素和數組元素數最少的數組?

+0

array_search返回鍵'計數()'所有子陣列,然後只需使用內置的PHP函數'分鐘()'和' MAX()'。 – Rizier123

+0

如果min_elements()返回鍵或數組? – Progrock

回答

1

發現爲包含至少成員子陣列中的鍵的例子:

<?php 
$array=[ 
'subarray1'=>[1], 
'subarray2'=>[1,2,3,4,5,6,7,8], 
'subarray3'=>[1,2,3,4], 
'subarray4'=>[3], 
]; 

$counted = array_map('count', $array); 
$min_member_count = min($counted); 
$mins = array_filter($counted, function($item) use ($min_member_count) { 
    if($min_member_count == $item) return true; 
}); 
var_export(array_keys($mins)); 

輸出:

array (
    0 => 'subarray1', 
    1 => 'subarray4', 
) 

通過@ Rizier123的評論的啓發。

2

迭代一次得到count,然後使用minmax

<?php 

function extreme_elements($arr, $min_max){ 

    foreach ($arr as $key => $val) 
    $arr[$key] = count($val); 

    return array_search($min_max($arr),$arr); 

} 

// friendly named wrappers 
function max_elements($arr){ 
    return extreme_elements($arr, 'max'); 
} 
function min_elements($arr){ 
    return extreme_elements($arr, 'min'); 
} 

$array=[ 
"subarray1"=>[1], 
"subarray2"=>[1,2,3,4,5,6,7,8], 
"subarray3"=>[1,2,3,4] 
]; 

echo max_elements($array); // subarray2 
echo min_elements($array); // subarray1