72 lines
2.2 KiB
PHP
72 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* 单位转换工具函数
|
|
* 根据用户输入的数值和单位进行转换
|
|
* @param float $value 要转换的数值
|
|
* @param string $fromUnit 原始单位 (cm, m, km)
|
|
* @param string $toUnit 目标单位 (cm, m, km)
|
|
* @return float 转换后的数值
|
|
* @throws Exception 当提供的单位无效时抛出异常
|
|
*/
|
|
function unitConversion($value, $fromUnit, $toUnit) {
|
|
// 统一转换为小写以忽略大小写差异
|
|
$fromUnit = strtolower($fromUnit);
|
|
$toUnit = strtolower($toUnit);
|
|
|
|
// 检查单位是否有效
|
|
$validUnits = ['cm', 'm', 'km'];
|
|
if (!in_array($fromUnit, $validUnits) || !in_array($toUnit, $validUnits)) {
|
|
throw new Exception("无效的单位!请使用 cm、m 或 km");
|
|
}
|
|
|
|
// 如果单位相同,直接返回原值
|
|
if ($fromUnit === $toUnit) {
|
|
return $value;
|
|
}
|
|
|
|
// 定义转换率(转换到米)
|
|
$toMeters = [
|
|
'cm' => 0.01, // 厘米到米
|
|
'm' => 1, // 米到米
|
|
'km' => 1000 // 千米到米
|
|
];
|
|
|
|
// 定义从米转换的率
|
|
$fromMeters = [
|
|
'cm' => 100, // 米到厘米
|
|
'm' => 1, // 米到米
|
|
'km' => 0.001 // 米到千米
|
|
];
|
|
|
|
// 转换逻辑:先转换为米,再转换为目标单位
|
|
$valueInMeters = $value * $toMeters[$fromUnit];
|
|
$convertedValue = $valueInMeters * $fromMeters[$toUnit];
|
|
|
|
return $convertedValue;
|
|
}
|
|
|
|
/**
|
|
* 格式化显示转换结果
|
|
* @param float $value 原始数值
|
|
* @param string $fromUnit 原始单位
|
|
* @param float $result 转换后数值
|
|
* @param string $toUnit 目标单位
|
|
* @return string 格式化的结果字符串
|
|
*/
|
|
function formatResult($value, $fromUnit, $result, $toUnit) {
|
|
return "{$value} {$fromUnit} = {$result} {$toUnit}";
|
|
}
|
|
|
|
// 示例用法(可选)
|
|
/*
|
|
try {
|
|
// 测试不同转换场景
|
|
echo formatResult(100, 'cm', unitConversion(100, 'cm', 'm'), 'm') . "\n";
|
|
echo formatResult(1, 'm', unitConversion(1, 'm', 'cm'), 'cm') . "\n";
|
|
echo formatResult(5, 'km', unitConversion(5, 'km', 'm'), 'm') . "\n";
|
|
echo formatResult(1000, 'm', unitConversion(1000, 'm', 'km'), 'km') . "\n";
|
|
} catch (Exception $e) {
|
|
echo "错误: " . $e->getMessage() . "\n";
|
|
}
|
|
*/
|