php formula interpreter
v2.0.0
用于解析和运行公式的独立 PHP 库
composer require mormat/php-formula-interpreter
首先,创建MormatFormulaInterpreterCompiler
的实例
$ compiler = new Mormat FormulaInterpreter Compiler ();
然后使用compile()
方法来解析你想要解释的公式。它将返回MormatFormulaInterpreterExecutable
的实例:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
最后从可执行文件运行公式:
$ result = $ executable -> run ();
// $result equals 4
// variables can be used
price + 2
// parenthesis can be used
(1 + 2) * 3
// default functions are available
sqrt(4)
// complex formulas can be used
(((100 * 0.43075) * 1.1 * 1.5) / (1-0.425)) * 1.105
// string are supported
lowercase('FOO')
// arrays are supported
count([2, 3, 4])
// custom functions can be registered
your_function_here(2)
// use the in operator to check if an item is in array
1 in [1, 2, 3] // returns true
// use the in operator to check if a substring is in a string
'Wars' in 'Star Wars'
数值可以是整数或浮点数
2 // integer
2.30 // float
使用简单引号来分隔字符串
'foobar'
使用逗号分隔项目并使用方括号将项目包裹起来
[1, 2, 3]
函数、字符串和操作可以用作数组的一项
[cos(0), 'foobar', 2 + 2]
可以使用以下运算符:
操作员 | 用法 | 描述 |
---|---|---|
+ | a+b | a 和 b 之和。 |
- | a-b | a 和 b 的差异。 |
* | 一个 * 乙 | a 和 b 的乘积。 |
/ | 甲/乙 | a 和 b 的商。 |
in | 乙中的一个 | 如果 a 是数组,则检查 b 是否是 a 的项目。如果a是字符串,则检查b是否是a的子字符串 |
首先评估运算符*
、 ,然后评估运算符
+
和-
您还可以使用这样的括号来强制表达式的优先级
2 * (3 + 2)
您可以根据需要使用任意多个括号。
2 * (2 * (3 + 2 * (3 + 2)) + 2)
变量只是公式中的一个单词,如下所示:
price * rate / 100
在 PHP 中执行公式之前,请确保将所有必需的变量注入数组中
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
姓名 | 允许的类型 | 描述 |
---|---|---|
圆周率 | 获取 pi 的值 | |
因斯 | numeric | 余弦 |
罪 | numeric | 正弦 |
开方 | numeric | 平方根 |
战俘 | numeric , numeric | 指数表达式 |
模数 | numeric , numeric | 第一个值除以第二个值的余数 |
小写 | string | 转换为小写字符串 |
大写 | string | 转换为大写字符串 |
大写 | string | 将字符串的第一个字符设为大写 |
数数 | string|array | 如果 value 是数组,则计算数组中的项目数。如果value是字符串,则统计字符串中的字符数 |
使用MormatFormulaInterpreterCompiler
类中的registerCustomFunction()
方法。
自定义函数必须实现MormatFormulaInterpreterFunctionsFunctionInterface
。该接口包含以下方法:
某些用户可能想要执行简单的计算并能够尽可能地更改它。在使用库之前,您可以使用eval
函数。但这种方法有两个主要缺点:
安全。 eval 函数正在评估 php 脚本。 Php 是一种非常强大的语言,对于用户来说可能太强大了,尤其是当用户想要注入恶意代码时。
复杂。对于不懂编程语言的人来说,PHP 也很复杂。最好解释一下类似 Excel 的公式。