keboola/filter

简单的比较过滤器

2.0.0 2021-01-20 10:43 UTC

README

描述

将对象中的值与过滤器中预置的值进行比较。过滤器由包含键(对象中的字段名)、运算符和要比较的值的字符串构建而成。然后,将一个对象传递给过滤器,并评估该对象是否通过过滤器。

用法

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
  • 过滤器对空白字符敏感,因此 value == 100 将在 value␣ 中查找 ␣100 的值,而不是像预期的那样在 value100 中查找。
  • 正确 的用法: value==100
  • 错误 的用法: value == 100

支持的比较运算符

  • < -- 小于
  • > -- 大于
  • == -- 等于
  • <= -- 小于或等于
  • >= -- 大于或等于
  • != -- 不等于
  • ~~ -- 类似
  • !~ -- 不类似

类似运算符

类似(和不类似)运算符允许您使用部分匹配。在目标值中使用百分号 % 字符来匹配任意数量的字符,例如。

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

支持的逻辑运算符

使用逻辑运算符,您可以组合多个条件。您可以组合具有不同值和不同键的条件。支持的逻辑运算符

  • & -- 逻辑与
  • | -- 逻辑或

用法

  • 情况 1:对象的状态必须是 enabled,并且年龄必须大于 18

status==enabled&age>18

{
    'status': 'enabled',
    'age': 20
}

在此对象上 compareObject 将返回 true

{
    'status': 'enabled',
    'age': 15
}

在此对象上 compareObject 将返回 false

  • 情况 2:对象的状态必须是 newudated

status==new|status==updated

{
    'status': 'new'
}

在此对象上 compareObject 将返回 true

{
    'status': 'updated'
}

在此对象上 compareObject 将返回 true

{
    'status': 'closed'
}

在此对象上 compareObject 将返回 false

组合逻辑运算符

不支持括号,但应用了标准运算符优先级(&| 之前)。例如,表达式 a==b&c==d|e==f 被解释为 (a==b&c==d)|e==f,而表达式
a==b&c==d|e==f&g==h 转换为 (a==b&c==d)|(e==f&g==h)