@@ -105,50 +105,59 @@ public static function toArray(array $filter = [])
105
105
}
106
106
static ::$ _cacheItems [$ class ] = $ items ;
107
107
}
108
- $ items = array_filter (static ::$ _cacheItems [$ class ], function ($ item ) use ($ filter ) {
108
+ $ items = array_filter (static ::$ _cacheItems [$ class ], function ($ item ) use ($ class , $ filter ) {
109
109
foreach ($ filter as $ key => $ filterItem ) {
110
110
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
+ );
152
161
}
153
162
} else {
154
163
$ value = $ filterItem ;
0 commit comments