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

点击首页Nearhospitals按钮触发deg2rad参数类型错误求助

解决deg2rad()参数类型不匹配的警告问题

让我们一步步拆解这个问题,找到根源并修复它:

错误原因分析

这个警告的核心很明确:deg2rad()函数要求传入**数值类型(double/float)来完成角度转弧度计算,但你的nearhospital.php第20行代码里,给它传了一个字符串(string)**类型的值。而「Nearby Police station」功能正常,说明警局对应的后端代码里,传递给角度转换函数的参数是正确的数值类型,两者的差异就在这里。

排查步骤

  1. 定位问题代码:打开nearhospital.php,找到第20行调用deg2rad()的代码,记录下它的参数变量名(比如$user_lat、$user_lng这类定位相关变量)。
  2. 检查参数来源:这个参数应该是前端调用定位功能后传递过来的经纬度值,对比警局功能的前端传参逻辑,确认:
    • 前端是否把经纬度以纯数值形式发送(而不是带引号的字符串,或者包含非数字字符)
    • 后端通过$_GET/$_POST获取参数时,是否因为默认规则把数值转成了字符串
  3. 验证参数类型:在调用deg2rad()之前,临时添加代码打印参数的类型和值,快速确认问题:
    // 替换成你的参数变量名
    var_dump($user_lat);
    echo gettype($user_lat);
    
    如果输出是string,那就是类型不匹配的实锤了。

修复方案

方案1:强制转换参数类型

在调用deg2rad()前,把字符串参数转成数值类型,这是最直接的修复方式:

// 方式1:用(double)强制转换
$rad_latitude = deg2rad((double)$user_lat);
$rad_longitude = deg2rad((double)$user_lng);

// 方式2:用floatval()更稳妥,自动处理非数字字符
$rad_latitude = deg2rad(floatval($user_lat));
$rad_longitude = deg2rad(floatval($user_lng));

方案2:增加参数校验(可选)

为了避免后续出现类似问题,可以在转换前先校验参数是否为有效数值:

if (!is_numeric($user_lat) || !is_numeric($user_lng)) {
    // 返回错误提示给前端,或者做其他异常处理
    echo json_encode(['status' => 'error', 'msg' => 'Invalid location coordinates']);
    exit;
}
// 再进行类型转换和计算
$rad_latitude = deg2rad(floatval($user_lat));

方案3:对齐前端传参逻辑

如果警局功能的前端是把经纬度作为数值传递的,检查「Nearhospitals」的前端代码,确保传参格式一致(比如不要给数值加引号,或者避免在传递前把数值转成字符串)。

内容的提问来源于stack exchange,提问作者Azhar Saeed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:54:49