@@ -105,50 +105,59 @@ public static function toArray(array $filter = [])
105105 }
106106 static ::$ _cacheItems [$ class ] = $ items ;
107107 }
108- $ items = array_filter (static ::$ _cacheItems [$ class ], function ($ item ) use ($ filter ) {
108+ $ items = array_filter (static ::$ _cacheItems [$ class ], function ($ item ) use ($ class , $ filter ) {
109109 foreach ($ filter as $ key => $ filterItem ) {
110110 if (is_int ($ key )) {
111- list ($ operator , $ key , $ value ) = $ filterItem ;
112- switch ($ operator ) {
113- case '= ' :
114- if ($ item [$ key ] != $ value ) {
115- return false ;
116- }
117- break ;
118-
119- case '!= ' :
120- if ($ item [$ key ] == $ value ) {
121- return false ;
122- }
123- break ;
124-
125- case '> ' :
126- if ($ item [$ key ] <= $ value ) {
127- return false ;
128- }
129- break ;
130-
131- case '< ' :
132- if ($ item [$ key ] >= $ value ) {
133- return false ;
134- }
135- break ;
136-
137- case '>= ' :
138- if ($ item [$ key ] < $ value ) {
139- return false ;
140- }
141- break ;
142-
143- case '<= ' :
144- if ($ item [$ key ] > $ value ) {
145- return false ;
146- }
147- break ;
148-
149- case 'in ' :
150- return in_array ($ item [$ key ], $ value , true );
151- break ;
111+ $ operator = $ filterItem [0 ];
112+ if (in_array ($ operator , ['= ' , '!= ' , '> ' , '< ' , '>= ' , '<= ' , 'in ' ])) {
113+ $ key = $ filterItem [1 ];
114+ $ value = $ filterItem [2 ];
115+ switch ($ operator ) {
116+ case '= ' :
117+ if ($ item [$ key ] != $ value ) {
118+ return false ;
119+ }
120+ break ;
121+
122+ case '!= ' :
123+ if ($ item [$ key ] == $ value ) {
124+ return false ;
125+ }
126+ break ;
127+
128+ case '> ' :
129+ if ($ item [$ key ] <= $ value ) {
130+ return false ;
131+ }
132+ break ;
133+
134+ case '< ' :
135+ if ($ item [$ key ] >= $ value ) {
136+ return false ;
137+ }
138+ break ;
139+
140+ case '>= ' :
141+ if ($ item [$ key ] < $ value ) {
142+ return false ;
143+ }
144+ break ;
145+
146+ case '<= ' :
147+ if ($ item [$ key ] > $ value ) {
148+ return false ;
149+ }
150+ break ;
151+
152+ case 'in ' :
153+ return in_array ($ item [$ key ], $ value , true );
154+ break ;
155+ }
156+ } else {
157+ return call_user_func_array (
158+ [$ class , $ operator ],
159+ array_merge ([$ item ], array_slice ($ filterItem , 1 ))
160+ );
152161 }
153162 } else {
154163 $ value = $ filterItem ;
0 commit comments