查找具有最高和最低元素数的数组

时间:2016-08-14 23:46:22

标签: php arrays

我想根据它包含的值的数量找出哪个数组最大和最小。

例如:

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

max_elements($ array)返回 subarray2 min_elements($ array)返回 subarray1

PHP是否有任何函数可以选择包含大量元素的数组和数量最少的数组?

2 个答案:

答案 0 :(得分:2)

获取count后迭代,然后使用array_searchmin

返回包含max的密钥
<?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

答案 1 :(得分: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的评论启发。