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

咨询(请教) PHP 数组逻辑处理问题。

  •  
  •   MiaoLei911 · 351 天前 · 1074 次点击
    这是一个创建于 351 天前的主题,其中的信息可能已经有所发展或是发生改变。
    已知有两位数(变量),最小值$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
    4 条回复    2023-08-19 17:26:26 +08:00
    MiaoLei911
        1
    MiaoLei911  
    OP
       351 天前
    不会写马克 php 语法,无法格式化,可以复制结果数组到 https://www.json.cn/# 看下。感谢 v 友
    dsphper
        2
    dsphper  
       351 天前
    > 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 。
    MiaoLei911
        3
    MiaoLei911  
    OP
       351 天前
    @dsphper 感谢,https://www.v2ex.com/t/932011#reply5 3 楼已经回复解决了
    aquman888
        4
    aquman888  
       222 天前
    <?php
    $min = 13;
    $max = 47;

    $data = array();
    $current = $min;

    while ($current <= $max) {
    $step_begin = $current;
    $step_end = min($current + 10 - ($current % 10), $max + 1);

    $data[] = array(
    "begin" => $step_begin,
    "end" => $step_end - 1
    );

    $current = $step_end;
    }

    print_r($data);
    ?>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   965 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:45 · PVG 04:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.