V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MiaoLei911
V2EX  ›  程序员

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

  •  
  •   MiaoLei911 · 2023-04-12 18:27:59 +08:00 · 922 次点击
    这是一个创建于 595 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    6 条回复    2023-04-12 19:11:49 +08:00
    MiaoLei911
        1
    MiaoLei911  
    OP
       2023-04-12 18:37:48 +08:00
    js 语法解答也可以,我能看懂,其他语言就看不懂了。。
    colinlikepotatos
        2
    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
        3
    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
        4
    MiaoLei911  
    OP
       2023-04-12 18:55:54 +08:00
    @seth19960929 太厉害了。我就是没思路 ,感激
    MiaoLei911
        5
    MiaoLei911  
    OP
       2023-04-12 18:57:39 +08:00
    @colinlikepotatos 大哥你这个起始值和中间值对了,只是 max 不对,max 不是 10 的倍数话就还是差一条数据
    0o0o0o0
        6
    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] } })
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 10:36 · PVG 18:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.