数式を解析して実行するためのスタンドアロンの 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の積。 |
/ | a / b | a と b の商。 |
in | bのa | 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 );
名前 | 許可されるタイプ | 説明 |
---|---|---|
円周率 | 円周率の値を取得する | |
コス | numeric | 余弦 |
罪 | numeric | 正弦 |
平方メートル | numeric | 平方根 |
捕虜 | numeric 、 numeric | 指数表現 |
モジュロ | numeric 、 numeric | 最初の値を 2 番目の値で割った余り |
小文字 | string | 小文字の文字列に変換します |
大文字 | string | 大文字の文字列に変換します |
大文字にする | string | 文字列の最初の文字を大文字にする |
カウント | string|array | value が配列の場合、配列内の項目をカウントします。値が文字列の場合、文字列内の文字数をカウントします。 |
MormatFormulaInterpreterCompiler
クラスのregisterCustomFunction()
メソッドを使用します。
カスタム関数はMormatFormulaInterpreterFunctionsFunctionInterface
実装する必要があります。このインターフェースには以下のメソッドが含まれています。
単純な計算を実行し、それを可能な限り変更できるようにしたいユーザーもいるでしょう。ライブラリを使用する前に、 eval
関数を使用できます。しかし、この方法には 2 つの大きな欠点があります。
安全。 PHP スクリプトは eval 関数によって評価されています。 Php は非常に強力な言語であり、特にユーザーが悪意のあるコードを挿入したい場合には、おそらく強力すぎる可能性があります。
複雑。 Php は、プログラミング言語を理解していない人にとっては複雑でもあります。代わりに Excel のような数式を解釈すると便利かもしれません。