@@ -20,7 +20,7 @@ class QueryMatchFilter extends AbstractFilter
2020{
2121 public const MATCH_QUERY_OPERATORS = '
2222 @(\.(?<key>[^ =]+)|\[[" \']?(?<keySquare>.*?)[" \']?\])
23- (\s*(?<operator>==|=|<>|!==|!=|>|<)\s*(?<comparisonValue>.+))?
23+ (\s*(?<operator>==|=|<>|!==|!=|>|<|in )\s*(?<comparisonValue>.+))?
2424 ' ;
2525
2626 /**
@@ -47,20 +47,28 @@ public function filter($collection): array
4747 $ comparisonValue = $ matches ['comparisonValue ' ] ?? null ;
4848
4949 if (is_string (($ comparisonValue ))) {
50- if (strtolower ($ comparisonValue ) === 'false ' ) {
51- $ comparisonValue = false ;
52- }
50+ if (strpos ($ comparisonValue , "[ " ) === 0 && substr ($ comparisonValue , -1 ) === "] " ) {
51+ $ comparisonValue = substr ($ comparisonValue , 1 , -1 );
52+ $ comparisonValue = preg_replace ('/^[ \'"]/ ' , '' , $ comparisonValue );
53+ $ comparisonValue = preg_replace ('/[ \'"]$/ ' , '' , $ comparisonValue );
54+ $ comparisonValue = preg_replace ('/[ \'"],[ ]*[ \'"]/ ' , ', ' , $ comparisonValue );
55+ $ comparisonValue = explode (", " , $ comparisonValue );
56+ } else {
57+ if (strtolower ($ comparisonValue ) === 'false ' ) {
58+ $ comparisonValue = false ;
59+ }
5360
54- if (strtolower ($ comparisonValue ) === 'true ' ) {
55- $ comparisonValue = true ;
56- }
61+ if (strtolower ($ comparisonValue ) === 'true ' ) {
62+ $ comparisonValue = true ;
63+ }
5764
58- if (strtolower ($ comparisonValue ) === 'null ' ) {
59- $ comparisonValue = null ;
60- }
65+ if (strtolower ($ comparisonValue ) === 'null ' ) {
66+ $ comparisonValue = null ;
67+ }
6168
62- $ comparisonValue = preg_replace ('/^[ \'"]/ ' , '' , $ comparisonValue );
63- $ comparisonValue = preg_replace ('/[ \'"]$/ ' , '' , $ comparisonValue );
69+ $ comparisonValue = preg_replace ('/^[ \'"]/ ' , '' , $ comparisonValue );
70+ $ comparisonValue = preg_replace ('/[ \'"]$/ ' , '' , $ comparisonValue );
71+ }
6472 }
6573
6674 foreach ($ collection as $ value ) {
@@ -86,6 +94,10 @@ public function filter($collection): array
8694 if ($ operator === '< ' && $ value1 < $ comparisonValue ) {
8795 $ return [] = $ value ;
8896 }
97+
98+ if ($ operator === 'in ' && is_array ($ comparisonValue ) && in_array ($ value1 , $ comparisonValue , true )) {
99+ $ return [] = $ value ;
100+ }
89101 }
90102 }
91103
0 commit comments