@@ -77,16 +77,15 @@ public function inject(callable $fn, $memo)
77
77
78
78
public function reduceRight (callable $ fn , $ memo )
79
79
{
80
- // fix!
81
- return array_reduce ($ this ->data , $ fn , $ memo );
80
+ return array_reduce (array_reverse ($ this ->data ), $ fn , $ memo );
82
81
}
83
82
84
83
public function foldr (callable $ fn , $ memo )
85
84
{
86
85
return $ this ->reduceRight ($ fn , $ memo );
87
86
}
88
87
89
- public function find (callabe $ fn )
88
+ public function find (callable $ fn )
90
89
{
91
90
foreach ($ this ->data as $ index => $ value ) {
92
91
if ($ fn ($ value , $ index )) {
@@ -95,20 +94,14 @@ public function find(callabe $fn)
95
94
}
96
95
}
97
96
98
- public function detect (callabe $ fn )
97
+ public function detect (callable $ fn )
99
98
{
100
99
return $ this ->find ($ fn );
101
100
}
102
101
103
102
public function filter (callable $ fn )
104
103
{
105
- $ data = [];
106
-
107
- foreach ($ this ->data as $ index => $ value ) {
108
- if ($ fn ($ value , $ index )) {
109
- $ data [$ index ] = $ value ;
110
- }
111
- }
104
+ $ data = array_filter ($ this ->data , $ fn , \ARRAY_FILTER_USE_BOTH );
112
105
113
106
return new static ($ data );
114
107
}
@@ -120,17 +113,18 @@ public function select(callable $fn)
120
113
121
114
public function reject (callable $ fn )
122
115
{
123
- $ data = [];
124
-
125
- foreach ($ this ->data as $ index => $ value ) {
126
- if (!$ fn ($ value , $ index )) {
127
- $ data [$ index ] = $ value ;
128
- }
129
- }
116
+ $ data = array_filter ($ this ->data , $ this ->negate ($ fn ), \ARRAY_FILTER_USE_BOTH );
130
117
131
118
return new static ($ data );
132
119
}
133
120
121
+ protected function negate (callable $ fn )
122
+ {
123
+ return function () use ($ fn ) {
124
+ return !call_user_func_array ($ fn , func_get_args ());
125
+ };
126
+ }
127
+
134
128
public function every (callable $ fn )
135
129
{
136
130
foreach ($ this ->data as $ index => $ value ) {
@@ -199,7 +193,7 @@ protected function matcher(array $props)
199
193
{
200
194
return function ($ value , $ index ) use ($ props ) {
201
195
foreach ($ props as $ prop => $ criteria ) {
202
- if ($ value !== $ criteria || $ prop != $ index ) {
196
+ if (\array_column ([ $ value], $ prop) != [ $ criteria ] ) {
203
197
return false ;
204
198
}
205
199
}
0 commit comments