PHP中按3kg范围分组整理数值数组的实现方法咨询
解决PHP数组按3kg范围分组的问题
没问题,我来帮你搞定这个分组转换!咱们一步步拆解怎么做:
核心思路
- 先把原始数组里带
kg的重量字符串转换成纯整数,方便后续区间计算。 - 对每个重量值,计算它所属的3kg跨度区间(比如85kg对应
85kg-88kg,90kg对应89kg-92kg)。 - 把同一区间的计数累加起来,最终整理成目标格式的数组。
完整代码实现
// 你的原始数组 $originalData = [ '85kg' => '1', '87kg' => '3', '88kg' => '1', '90kg' => '3', '98kg' => '1' ]; $result = []; $range = 3; // 你需要的3kg区间跨度 $intervalStep = $range + 1; // 每个区间包含的数值个数(比如85-88是4个数值,跨度刚好3kg) foreach ($originalData as $weightStr => $count) { // 提取纯重量数值,去掉"kg"后缀 $weight = (int) str_replace('kg', '', $weightStr); // 计算当前重量所属区间的起始和结束值 $start = floor(($weight - 1) / $intervalStep) * $intervalStep + 1; $end = $start + $range; // 格式化区间键名 $intervalKey = "{$start}kg-{$end}kg"; // 累加对应区间的计数 if (!isset($result[$intervalKey])) { $result[$intervalKey] = 0; } $result[$intervalKey] += (int)$count; } // 输出结果 print_r($result);
代码细节说明
- 数值提取:用
str_replace去掉kg后缀,转成整数后就能进行数学运算了。 - 区间计算:通过
floor(($weight - 1) / $intervalStep)确定重量所属的分组序号,再反推出区间的起始和结束值,保证每个区间连续不重叠且跨度为3kg。 - 计数累加:遍历过程中检查结果数组是否已有该区间的键,没有就初始化为0,然后把当前计数加进去。
运行这段代码后,你会得到和示例完全一致的结果:
Array ( [85kg-88kg] => 5 [89kg-92kg] => 3 [97kg-100kg] => 1 )
如果之后需要调整区间范围(比如改成5kg),只需要修改$range的值就行,非常灵活~
内容的提问来源于stack exchange,提问作者Davide
相关产品推荐
相关产品推荐

