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

PHP中使用str_replace替换得到数学表达式后如何计算其数值结果?

str_replace 仅会执行字符串替换操作,得到的是表达式格式的普通文本,PHP 不会自动解析其中的运算逻辑,可通过以下两种方案实现计算:

方案1:使用 eval (仅适用于表达式完全可控的场景)

如果 $hr_formula->math 仅允许管理员配置、无普通用户输入入口,可配合正则校验后用 eval 执行计算,代码示例如下:

// 原有替换逻辑
$calculation = str_replace($variables, $values, $hr_formula->math);

// 校验表达式仅包含数字、四则运算符、括号和空格,拦截恶意代码
if (!preg_match('/^[\d\s\+\-\*\/\(\)]+$/', $calculation)) {
    throw new \Exception("运算表达式不合法");
}

// 执行计算,eval 要求语句以分号结尾
$result = eval("return {$calculation};");

方案2:使用专业数学表达式解析库(更安全,推荐)

如果存在不可信输入风险,推荐使用无eval依赖的第三方解析库实现,比如 nxp/math-executor,还可以省略手动字符串替换的步骤:

  1. 安装依赖:
    composer require nxp/math-executor
    
  2. 代码示例:
    use NXP\MathExecutor;
    
    $executor = new MathExecutor();
    // 直接绑定变量到解析器
    $executor->setVar('fsueldo', $employee->salary);
    $executor->setVar('fgratificacion', $employee->gratification);
    // 直接传入原始公式即可得到计算结果,自动处理运算符优先级、括号等逻辑
    $result = $executor->execute($hr_formula->math);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:54:04