为什么我的值总是在 laravel 中作为字符串?

why my value is always taking as string in laravel?

我正在接受用户的请求并将其存储在 $request 变量中基于此我正在获取一些关键值直到它工作正常,在此之后我将这个值传递给开关盒声明它的作用意味着如果值为 double/float 类型,它将在该情况下执行一些操作,对于 string and integer 也类似。但即使我传递 integer or double/float 类型,它也会进入 string 只有案例。你能帮我看看我错在哪里吗..

my api {url}/details?limit=25&amount=99.9 有时金额是 99 or NinteyNine

Public function run(){
$request=new Request();
$value=$request->amount;
switch(gettype($value)){
 case 'double':
    //perform some logic if type is double
   break;
 case 'string':
   //perform some logic if type is string
    break;
 default:
   //perform some logic if type is Integer 
}
}

传递的值是什么,它被认为是字符串类型,我只需要解决这个问题,请帮助我..

我认为 $request->amount 总是 return 一个字符串,因为 URL 查询参数也是字符串。

is_numeric() 查找变量是数字还是 数字字符串 。在您的情况下,它是 returning true 因为它是一个数字字符串。

你可以这样做:

function amountType(string $amount): string {
    if (is_numeric($amount)) {
        if ((int) $amount == (float) $amount) {
            return "int";
        }

        return "float";
    }
    
    return "string";
}

$type = amountType($request->amount);

switch($type) {
    case 'float':
        //perform some logic if type is double
        break;
    case 'string':
        //perform some logic if type is string
        break;
    case 'int':
        //perform some logic if type is Integer
        break;
    default:
        // Invalid type
}

片段:https://3v4l.org/K9XVB

或者,如果 floatint 输入的行为相同,您也可以这样做:

$amount = $request->amount;

if (is_numeric($amount)) {
    $numericAmount = (float) $amount;
    // Perform some logic if input is numeric
    return;
}

// Perform some logic if input is string
return;