keboola / filter
Simple comparison filter
Requires
- php: >=7.4
- keboola/php-utils: ^4.1
Requires (Dev)
- keboola/coding-standard: >=9.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-11-29 04:43:01 UTC
README
Description
Compare values in objects against pre-set values in the filter. The filter is constructed from a string with a key (field name in the the object), operator and a value to be compared against. Then an object is passed to the filter and evaluated whether it passes the filter or not.
Usage
use Keboola\Filter\Filter; // Compare the `shoeSize` property of John $john = new \stdClass(); $john->shoeSize = 45; $filter = FilterFactory::create("shoeSize>42"); $filter->compareObject($john); // true // Multiple conditions can be used $filter = FilterFactory::create("field1==0&field2!=0"); $object = (object) [ 'field1' => 0, 'field2' => 1 ]; $result = $filter->compareObject($object); // true
- The filter is whitespace sensitive, therefore
value == 100
will look intovalue␣
for a␣100
value, instead ofvalue
and100
as likely desired. - Correct use:
value==100
- Wrong use:
value == 100
Supported comparison operators
<
-- less than>
-- greater than==
-- equals<=
-- less or equals>=
-- greater or equals!=
-- not equals~~
-- like!~
-- not like
Like operator
Like (and not like) operator allows you to use partial matching. Use a
percent %
character in the target value to match any number of characters, e.g.:
use Keboola\Filter\Filter; // Compare the `shoeSize` property of John $john = new \stdClass(); $john->name = "Johnny"; $filter = FilterFactory::create("name~~Johnny"); $filter->compareObject($john); // true
Supported logical operators
With logical operators you can combine multiple conditions together. You can combine both conditions with different values and conditions with different keys. Supported logical operators:
&
-- logical and|
-- logical or
Usage
- Case 1: Object's
status
must beenabled
andage
must be over18
status==enabled&age>18
{
'status': 'enabled',
'age': 20
}
compareObject
on this object will return true
.
{
'status': 'enabled',
'age': 15
}
compareObject
on this object will return false
.
- Case 2: Object's
status
must benew
orudated
status==new|status==updated
{
'status': 'new'
}
compareObject
on this object will return true
.
{
'status': 'updated'
}
compareObject
on this object will return true
.
{
'status': 'closed'
}
compareObject
on this object will return false
.
Combining logical operators
Parentheses are not supported, however the standard operator precedence is
applied (&
precedes |
). For example, the expression
a==b&c==d|e==f
is interpreted as (a==b&c==d)|e==f
and the
expression a==b&c==d|e==f&g==h
translates into (a==b&c==d)|(e==f&g==h)
.