You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP程序扩展:支持多单位时长表达式转换为总秒数并处理错误输入

PHP程序扩展:支持多单位时长表达式转换为总秒数并处理错误输入

嘿,我来帮你把这个程序扩展成支持多单位组合输入,同时加上错误处理功能!你的现有代码只能处理单个参数,咱们一步步改造它:

核心思路

  1. 把输入的多个时长片段(比如1d、3h)拆分开来
  2. 验证每个片段的格式是否合法(必须是数字+指定单位的形式,单位只能是d/h/m/s)
  3. 把每个合法片段转换成秒数后累加
  4. 一旦遇到不符合要求的输入,立刻返回错误提示

改造后的完整代码

<?php
// 先检查是否有输入参数
if (!isset($argv[1]) || empty($argv[1])) {
    echo "wrong input\n";
    exit;
}

// 定义单位到秒数的映射表,比switch更简洁易维护
$unitMap = [
    'd' => 86400,
    'h' => 3600,
    'm' => 60,
    's' => 1,
];

$totalSeconds = 0;
// 按空格拆分输入的多个时长片段
$parts = explode(' ', $argv[1]);

foreach ($parts as $part) {
    // 用正则验证每个片段的格式:必须是一个或多个数字+指定单位
    if (!preg_match('/^(\d+)([dhms])$/', trim($part), $matches)) {
        echo "wrong input\n";
        exit;
    }

    $value = (int)$matches[1];
    $unit = $matches[2];

    // 检查单位是否在我们支持的列表里
    if (!isset($unitMap[$unit])) {
        echo "wrong input\n";
        exit;
    }

    // 累加秒数
    $totalSeconds += $value * $unitMap[$unit];
}

// 输出最终总秒数
echo $totalSeconds . "\n";
?>

代码说明

  • 输入检查:首先判断用户有没有传入参数,避免空输入导致报错
  • 单位映射表:用数组替代switch语句,后续要新增支持的单位,直接在数组里添加键值对即可,维护成本更低
  • 正则验证:/^(\d+)([dhms])$/确保每个片段都是「数字+合法单位」的格式,比如12h合法,12x或者h12这类不合法输入会直接触发错误提示
  • 错误处理:只要任何一个片段格式不对、单位不支持,立刻输出wrong input并终止程序
  • 累加计算:把每个合法片段的秒数累加,最后输出总结果

测试示例

  • 输入php yourscript.php "1d 3h 16m 2s",会输出94562(计算逻辑:186400 + 33600 + 16*60 + 2 = 86400+10800+960+2=94562)
  • 输入php yourscript.php "5x"或者php yourscript.php "1d 2h 3",都会输出wrong input

备注:内容来源于stack exchange,提问作者valentijnkusse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:12:44