加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 18:24:25 所属栏目: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] =
我有以下数组:
(
    [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); 
}));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读