求助 PHP 数组逻辑处理问题。

2023-04-12 18:27:59 +08:00
 MiaoLei911

php 节点已经沉了,原帖 https://www.v2ex.com/t/932006

已知有两位数(变量),最小值$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

832 次点击
所在节点    程序员
6 条回复
MiaoLei911
2023-04-12 18:37:48 +08:00
js 语法解答也可以,我能看懂,其他语言就看不懂了。。
colinlikepotatos
2023-04-12 18:47:45 +08:00
<?php
$min = 23;
$max = 100;
$step = 10;
$arr = [];
$end = $min + ($step - ($min % $step));
$start = $min;
do{
if($end > $max){
if($start >= $end){
$arr[] = [
"begin"=>$start,
"end"=>$max,
];
}
break;
}else{
$arr[] = [
"begin"=>$start,
"end"=>$end,
];

$start = $end + 1;
$end = $start + ($step - ($start % $step));
}


}while(true);
echo "<pre>";
var_dump($arr);
echo "</pre>";
这个意思?
seth19960929
2023-04-12 18:50:51 +08:00
这有什么逻辑吗

$min = 13;
$max = 47;

$nextVal = $min - ($min % 10) + 10;
$result = [];
while (($nextVal - 10) < $max) {

$result[] = [
'begin' => $min,
'end' => $nextVal > $max ? $max : $nextVal,
];

$min = $nextVal + 1;
$nextVal += 10;
}


var_dump($result);
MiaoLei911
2023-04-12 18:55:54 +08:00
@seth19960929 太厉害了。我就是没思路 ,感激
MiaoLei911
2023-04-12 18:57:39 +08:00
@colinlikepotatos 大哥你这个起始值和中间值对了,只是 max 不对,max 不是 10 的倍数话就还是差一条数据
0o0o0o0
2023-04-12 19:11:49 +08:00
```javascript
length = (max-max%10-min-10+min%10)/10+1
baseArr = [...Array(length).keys()]
begins = baseArr.map(p=>p*10+min+10-min%10+1))
ends = baseArr.map(p=>p*10+min+10-min%10).concat([max])
res = begins.map((value,index,arr)=>{ return { begin:value,end:ends[index] } })
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/932011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX