PHP code example of jakubciszak / rule-engine
1. Go to this page and download the library: Download jakubciszak/rule-engine library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jakubciszak / rule-engine example snippets
$rules = json_decode('{"rules": [...]}', true, 512, JSON_THROW_ON_ERROR);
$context = json_decode('{"a":1,"b":2}', true, 512, JSON_THROW_ON_ERROR);
$result = FlatRuleAPI::evaluate($rules, $context);
$result->result; // bool
$result->context; // updated context array
use JakubCiszak\RuleEngine\Api\NestedRuleApi;
$rules = ['and' => [
['<' => [['var' => 'temp'], 110]],
['==' => [['var' => 'pie.filling'], 'apple']],
]];
$data = ['temp' => 100, 'pie' => ['filling' => 'apple']];
$result = NestedRuleApi::evaluate($rules, $data);
$result->result; // true
$ruleset = [
'rule1' => ['==' => [['var' => 'a'], 1]],
'rule2' => ['>' => [['var' => 'b'], 2]],
];
$data = ['a' => 1, 'b' => 3];
NestedRuleApi::evaluate($ruleset, $data)->result; // true
use JakubCiszak\RuleEngine\Api\ExpressionRuleApi;
$expression = '(actualAge > 18 or name === "Adam") or (citizenship === "PL" and actualAge > 15)';
$data = ['actualAge' => 16, 'name' => 'John', 'citizenship' => 'PL'];
$result = ExpressionRuleApi::evaluate($expression, $data);
$result->result; // true
$expression = 'customer["address"]["country"] === "PL" and customer["role"] in ["admin", "owner"]';
$data = [
'customer' => [
'address' => ['country' => 'PL'],
'role' => 'admin',
],
];
ExpressionRuleApi::evaluate($expression, $data)->result; // true
$rules = [
'adult' => 'actualAge >= 18',
'plCitizen' => 'citizenship === "PL"',
];
$data = ['actualAge' => 20, 'citizenship' => 'PL'];
ExpressionRuleApi::evaluate($rules, $data)->result; // true
$data = [
'actualAge' => 20,
'status' => 'pending',
'score' => 0,
];
$result = ExpressionRuleApi::evaluate(
expression: 'actualAge >= 18',
data: $data,
actions: [
'.status = approved',
'.score + 10',
],
);
$result->result; // true
$result->context['status']; // approved
$result->context['score']; // 10
ExpressionRuleApi::lint('actualAge >= 18', ['actualAge' => 20]);
use JakubCiszak\RuleEngine\Api\StringRuleApi;
$expr = '(.actualAge > 18 or .name is Adam) or (.citizenship is PL and .actualAge > 15)';
$data = ['actualAge' => 16, 'name' => 'John', 'citizenship' => 'PL'];
$result = StringRuleApi::evaluate($expr, $data);
$result->result; // true
$complex = '((.a > 1 and (.b < 3 or .c is 2)) or ((.d >= 5 and .e <= 10) and not (.f != 7))) and (.g is true or .h is false)';
$data = [
'a' => 2,
'b' => 2,
'c' => 2,
'd' => 5,
'e' => 10,
'f' => 7,
'g' => true,
'h' => true,
];
$result = StringRuleApi::evaluate($complex, $data);
$result->result; // true
$rules = [
'adult' => '.actualAge > 18',
'plCitizen' => '.citizenship is PL',
];
$data = ['actualAge' => 16, 'citizenship' => 'PL'];
$result = StringRuleApi::evaluate($rules, $data);
$result->result; // false
$flags = '.g and not .h';
$data = ['g' => true, 'h' => false];
StringRuleApi::evaluate($flags, $data)->result; // true
$rules = json_decode($json, true, 512, JSON_THROW_ON_ERROR); // $json contains JSON above
$context = ['a' => 1, 'b' => 1, 'count' => 0];
FlatRuleAPI::evaluate($rules, $context);
// $context['count'] === 1
$ruleset = [
'rule1' => [
'==' => [['var' => 'a'], 1],
'actions' => ['.count + 1'],
],
'rule2' => [
'==' => [['var' => 'count'], 1],
],
];
$data = ['a' => 1, 'count' => 0];
NestedRuleApi::evaluate($ruleset, $data); // true
// $data['count'] === 1
use JakubCiszak\RuleEngine\Rule;
use JakubCiszak\RuleEngine\Operator;
$rule = (new Rule())
->variable('expectedAge', 22)
->variable('age')
->greaterThan()
->evaluate($context);
use JakubCiszak\RuleEngine\RuleContext;
$context = new RuleContext();
$result = $rule->evaluate($context);