kmuenkel / rule-evaluator
检查给定的数据集是否与递归规则集相符
v1.0.0
2020-02-04 18:30 UTC
Requires
- php: >=7.0.0
This package is auto-updated.
Last update: 2024-09-06 03:36:37 UTC
README
检查给定的数据集是否与递归规则集相符
您从一个可能来自数据库的配置数组开始。每个“规则”只有三个数据点。
- 第一个值
- 比较运算符
- 第二个值
第一个和第二个值的键名表示这些值的性质。
reference1/reference2
表示内容将具有对正在评估的数据数组中的数据点的点符号引用。value1/value2
预期将包含一个静态值,应按字面值处理。child1/child2
表示“值”将是嵌套“规则”的布尔结果。
通过点符号引用和对“子”规则的支持,数据和条件都支持无限复杂性。但由于这是一个平面的3点“规则”记录,这使得通过数据库而不是配置文件来管理规则更有利。虽然这样的解析器还不存在,但您只需确保您的 DBParser
类实现了与当前 ConfigParser
相同的 Parser
接口。
键为 comparator
的比较运算符可以是以下任何一种
- '==': 值1等于值2
- '===': 值1严格等于值2
- '!=': 值1不等于值2
- '!==': 值1严格不等于值2
- '>': 值1大于值2
- '<': 值1小于值2
- 'in': 值1可以在定义为值2的数组中找到
- 'not in': 值1不能在定义为值2的数组中找到
- 'and': 值1和值2必须解析为
true
- '&&': 与 'and' 相同
- 'or': 值1或值2必须解析为
true
- '||': 与 'or' 相同
- 'regex': 值1与值2定义的模式匹配
- 'all'
- 定义为值1的数组中的所有元素都必须在定义为值2的数组中找到
- 或者 如果只有一个数组存在,它必须引用所有解析为
true
的嵌套规则
- 'any'
- 定义为值1的数组中找到的任何元素都必须在定义为值2的数组中找到
- 或者 如果只有一个数组存在,它必须引用至少一个解析为
true
的嵌套规则
- 'none'
- 定义为值1的数组中没有任何元素可以存在于定义为值2的数组中
- 或者 如果只有一个数组存在,它必须引用所有解析为
false
(或为空)的嵌套规则
- 'passes': 值1和正在评估的整个数据集都传递给定义为值2的闭包,其输出必须解析为
true
。这允许添加自定义规则行为。
示例用法
ruleConfig.php
return [ 'isKevin' => [ 'reference1' => 'name.first', 'comparator' => '==', 'value2' => 'Kevin' ], 'inCarolinas' => [ 'reference1' => 'address.state', 'comparator => 'in', 'value2' => [ 'NC', 'SC' ] ], 'isMe' => [ 'comparator' => 'all', 'value2' => [ 'isKevin', 'inCarolinas ] ] ];
data.json
{ "name": { "first": "Kevin" }, "address": { "state": "NC" } }
use Evaluator\Parsers\ConfigParser; $rules = require_once 'ruleConfig.php'; $data = json_decode(file_get_contents("data.json"), true); $data = array_dot($data); $ result = (new ConfigParser($data, $rules))->evaluate('isMe'); // true