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

PHP中如何在switch语句中处理同类多参数的时间转换计算?

问题原因及修复方案

你的代码核心问题是同类参数没有累加,而是被最后一次赋值覆盖。在switch语句中,你使用=直接给变量赋值,而非+=进行累加操作。比如输入2m 2m时,第一次循环$timemin被设为120,第二次循环又重新赋值为120,最终结果自然是120而非预期的240。

另外,$argv数组的第一个元素是脚本文件名(比如time.php),你之前的implode+explode会把这个文件名也加入计算,这是多余的,应该直接截取从索引1开始的参数。

修复后的代码

<?php
// 初始化时间变量
$timeday = 0;
$timehour = 0;
$timemin = 0;
$timesec = 0;

// 跳过$argv[0](脚本文件名),遍历所有参数
foreach (array_slice($argv, 1) as $time) {
    $letter = substr($time, -1);
    $aantal = substr($time, 0, -1);
    
    // 使用+=进行累加,而非直接赋值
    switch ($letter) {
        case "d":
            $timeday += $aantal * 86400;
            break;
        case "u":
            $timehour += $aantal * 3600;
            break;
        case "m":
            $timemin += $aantal * 60;
            break;
        case "s":
            $timesec += $aantal * 1;
            break;
    }
}

// 最后计算总数,不需要放在循环里
$total = $timeday + $timehour + $timemin + $timesec;
echo $total . " Seconds" . PHP_EOL;

关键修改点

  1. 用array_slice($argv, 1)跳过脚本文件名,只处理用户输入的时间参数
  2. 将switch中的=改为+=,实现同类参数的累加计算
  3. 将$total的计算移到循环外部,避免重复计算(循环内计算不影响结果,但没必要)

现在测试php time.php 2m 2m会输出240 Seconds,混合参数比如php time.php 1d 2u 3m 4s也会正确计算总和。

内容的提问来源于stack exchange,提问作者weggooie man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:41:56