sokil / php-smel

Structural Matching Expression Language

Repository from Github https://github.comsokil/php-smelRepository from Github https://github.comsokil/php-smel

Structural Matching Expression Language

Installation

Composer

composer req sokil/php-smel

Usage

<?php

$evaluator = new ExpressionEvaluator();
$evaluator->evaluate(
    ['param' => ['eq' => 42]], 
    ['param' => 42]
);

Expression language

Expression may be represented as array or JSON string:

<?php

$expression = '{"field": {"eq": 42}}';
$expression = ["field" => ["eq" => 42]];

Expression consists of logical and comparison operations over nodes of some key-value structure:

<?php

$evaluator = new ExpressionEvaluator();
$result = $evaluator->evaluate(
    // expression
    [
        'param1' => [
            'eq' => 42,
        ],
        'param2' => [
            'eq' => 43,
        ]
    ], 
    // key-value structure
    [
        'param1' => 42,
        'param2' => 43,
    ]
);

// will return true

Expression may be compound:

<?php

$evaluator = new ExpressionEvaluator();
$evaluator->evaluate(
    // expression 
    ['param' => ['gt' => 10, 'lt' => 30]],
    // key-value struct 
    ['param' => 20]
);

// will return true

Comparison expression

Name Description
eq Equals
neq Not equals
lt Less then
lte Less then or equals
gt Greater then
gte Greater than or equals
in In array
nin Not in array

Equals

{"someField": {"eq": 42}}

or shorthand

{"someField":  42}

Not Equals

{"someField": {"neq": 42}}

Greater than

{"someField": {"gt": 42}}

If comparing greater or equals:

{"someField": {"gte": 42}}

Less than

{"someField": {"lt": 42}}

If comparing less or equals:

{"someField": {"lte": 42}}

In array

{"someField": {"in": ["UKR", "USA"]}}

Not in array

{"someField": {"nin": ["UKR", "USA"]}}

About

Structural Matching Expression Language

License:MIT License


Languages

Language:PHP 100.0%