Laravel中如何编写多条件判断函数 正确识别URL传入的参数类型
问题根因
所有HTTP URL传递的查询参数,默认都会被解析为字符串类型,服务端不会自动做类型转换。你传入的33.34实际被拿到的是字符串格式的"33.34",直接用is_float()这类判断变量原生类型的函数自然不会命中,只会走到字符串分支。
修正方案
你需要先判断字符串内容对应的数值格式,再做分支处理,修正后的代码如下:
public static function conversionData(Request $request) { $value = $request->type; // 先判断是否为数值格式的字符串 if (is_numeric($value)) { $numValue = (float)$value; // 浮点数转int后和原值相等则为整数 if ($numValue === (int)$numValue) { // 整数分支逻辑 return (int)$numValue; } else { // 浮点数分支逻辑 return $numValue; } } // 非数值的字符串分支逻辑 return $value; }
注意事项
- 你原代码中函数名写的是
conversationData,和你定义的conversionData拼写不一致,注意排查笔误 - 原代码的两个
if是独立判断,就算第一个条件命中,第二个is_string判断还是会执行,可能导致逻辑覆盖错误,改为互斥分支更合理 - 如果业务需要严格限制为普通十进制数字格式,不支持科学计数法,可以把
is_numeric($value)替换为正则判断preg_match('/^\d+(\.\d+)?$/', $value)
内容的提问来源于stack exchange,提问作者user17426459
相关产品推荐
相关产品推荐

