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);