我有以下数组:
( [25] => 1 [26] => 3 [10] => 2 [24] => 1 )
它是使用PHP中的array_count_values()
函数创建的.
在array_count_values之前,实际的原始数组是这样的……
Array ( [0] => 26 [1] => [2] => 18 [3] => 28 [4] => 22 [5] => 21 [6] => 26 [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => )
这些是年龄,那么我如何将这些分组到年龄组?
假设我想要以下年龄组:< = 18 19-26 27-32> 32
它应该看起来:
( [<= 18] => 1 [19-26] => 4 [27-32] => 2 [ > 32] => 1 )
这是否有现成的功能?
我的解决方案
1繁琐的方法是创建年龄组的变量.如果关键匹配范围($min< = $value)&& amp;&& ($value< = $max)...
有趣的问题.这是我的解决方案.首先,定义一个年龄范围数组:
$age_ranges = array( array( 0,18),array( 19,26),array( 27,32),array( 33,150) // I use 150 as the "max" age );
然后,我们有你的array_count_values()输出:
$array_count_values = array( 25 => 1,26 => 3,10 => 2,24 => 1); // From OP
现在,我们创建一个包含所有年龄的数组,其中键是年龄,值是具有该年龄的人数.它需要按其键进行排序以进行下一步.
$all_ages = $array_count_values + array_fill( 0,150,0); ksort( $all_ages);
最后,我循环遍历所有年龄范围,从$all_ages数组中切除年龄范围,并将它们的值相加以生成年龄范围的数组,其值对应于落入该年龄范围的人数.
$result = array(); foreach( $age_ranges as $range) { list( $start,$end) = $range; $result["$start-$end"] = array_sum( array_slice( $all_ages,$start,$end - $start + 1)); }
print_r($result); yields the following output:
Array ( [0-18] => 2 [19-26] => 5 [27-32] => 0 [33-150] => 0 )
编辑:由于您仍然可以访问原始数组,因此您可以计算出最后有多少“未知数”:
$result['unknown'] = count( array_filter( $original_array,function( $el) { return empty( $el); }));