dsphper
2023-04-12 18:59:06 +08:00
> 2 / 2
>
> php 数组问题 已知有两位数(变量),最小值$min ,最大值$max 。 我的原始数据例如:$min=13 ,$max=47 。 我期望得到的数据(按照 10 的倍数分块,min 值靠近 10 的倍数起跳,中途按 10 的倍数为一个阶梯,max 值不进 10 ): \[ { "begin":13, "end":20 }, { "begin":21, "end":30 }, { "begin":31, "end":40 }, { "begin":41, "end":47 } \] --min 与 max 为任意值,min 可能<=max
1 / 1
您可以使用以下代码来生成您期望得到的数据:
perl
```perl
// 将 $min 向上取整至最近的 10 的倍数
$min = ceil($min / 10) * 10;
// 将 $max 向下取整至最近的 10 的倍数
$max = floor($max / 10) * 10;
// 初始化结果数组
$result = [];
// 计算区间数量
$num_intervals = ($max - $min) / 10 + 1;
// 生成结果数组
for ($i = 0; $i < $num_intervals; $i++) {
// 计算当前区间的 begin 和 end 值
$begin = $min + $i * 10;
$end = $begin + 9;
// 如果 end 值大于 $max ,则将其设为 $max
if ($end > $max) {
$end = $max;
}
// 将当前区间的 begin 和 end 值加入结果数组
$result[] = [
"begin" => $begin,
"end" => $end
];
}
```
这段代码首先将 $min 和 $max 分别向上取整和向下取整至最近的 10 的倍数。然后计算区间数量,并使用循环生成每个区间的 begin 和 end 值,将它们加入结果数组中。如果最后一个区间的 end 值大于 $max ,则将其设为 $max 。