微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 将数组键分组到数字范围内,可能吗?

我有以下数组:
(
    [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); 
}));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐