Completed
Push — master ( 0b7415...f7faeb )
by Siwapun
04:16 queued 02:45
created

arrayForEach()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
cc 2
nc 1
nop 0
1
<?php
2
namespace Aerophant\Ramda;
3
4
/**
5
 * @param callable $predicateFunction
6
 * @param array $array
7
 * @return mixed
8
 */
9
function all()
10
{
11
  $all = function (callable $predicateFunction, array $array): bool {
12
    if (empty($array)) {
13
      return false;
14
    }
15
    foreach ($array as $it) {
16
      if (!$predicateFunction($it)) {
17
        return false;
18
      }
19
    }
20
    return true;
21
  };
22
  $arguments = func_get_args();
23
  $curried = curryN($all, 2);
24
  return call_user_func_array($curried, $arguments);
25
}
26
27
/**
28
 * @param callable $predicateFunction
29
 * @param array $array
30
 * @return bool
31
 */
32
function any()
33
{
34
  $any = function (callable $predicateFunction, array $array) {
35
    if (empty($array)) {
36
      return false;
37
    }
38
    foreach ($array as $it) {
39
      if ($predicateFunction($it)) {
40
        return true;
41
      }
42
    }
43
    return false;
44
  };
45
  $arguments = func_get_args();
46
  $curriedAny = curryN($any, 2);
47
  return call_user_func_array($curriedAny, $arguments);
48
}
49
50
/**
51
 * @param callable $fn he function to invoke. Receives one argument
52
 * @param array $array The list to iterate over.
53
 * @return null|\Closure
54
 */
55
function arrayForEach()
56
{
57
  $arrayForEach = function (callable $fn, array $array) {
58
    foreach ($array as $item) {
59
      $fn($item);
60
    }
61
  };
62
  $arguments = func_get_args();
63
  $curriedAny = curryN($arrayForEach, 2);
64
  return call_user_func_array($curriedAny, $arguments);
65
}
66
67
/**
68
 * a → [a] → [a]
69
 * @param mixed $item
70
 * @param array $array
71
 * @return array|\Closure
72
 */
73
function append()
74
{
75
  $append = function ($item, array $array) {
76
    return array_merge($array, [$item]);
77
  };
78
  $arguments = func_get_args();
79
  $curriedAny = curryN($append, 2);
80
  return call_user_func_array($curriedAny, $arguments);
81
}
82
83
/**
84
 * [a] → [a] → [a]
85
 * @param mixed $item
86
 * @param array $array
87
 * @return array|\Closure
88
 */
89
function concat()
90
{
91
  $concat = function (array $firstArray, array $secondArray) {
92
    return array_merge($firstArray, $secondArray);
93
  };
94
  $arguments = func_get_args();
95
  $curriedAny = curryN($concat, 2);
96
  return call_user_func_array($curriedAny, $arguments);
97
}
98
99
/**
100
 * a → [a] → Boolean
101
 * @param mixed $item item to compare against
102
 * @param array $array The array to consider
103
 * @return boolean|\Closure
104
 */
105
function contains()
106
{
107
  $contains = partialRight('in_array', [true]);
108
  $arguments = func_get_args();
109
  $curriedAny = curryN($contains, 2);
110
  return call_user_func_array($curriedAny, $arguments);
111
}
112
113
/**
114
 * @param int $index
115
 * @param array $array
116
 * @return mixed
117
 */
118
function drop()
119
{
120
  $drop = function (int $index, array $array) {
121
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
122
  };
123
  $arguments = func_get_args();
124
  $curried = curryN($drop, 2);
125
  return call_user_func_array($curried, $arguments);
126
}
127
128
/**
129
 * @param array $array
130
 * @return mixed
131
 */
132
function dropFirst()
133
{
134
  $dropFirst = drop(0);
135
  $arguments = func_get_args();
136
  $curried = curryN($dropFirst, 1);
137
  return call_user_func_array($curried, $arguments);
138
}
139
140
/**
141
 * @param array $array
142
 * @return mixed
143
 */
144
function dropLast()
145
{
146
  $dropLast = function (array $array) {
147
    $index = count($array)-1;
148
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
149
  };
150
151
  $arguments = func_get_args();
152
  $curried = curryN($dropLast, 1);
153
  return call_user_func_array($curried, $arguments);
154
}
155
156
/**
157
 * @param string|array $suffix
158
 * @param string|array $list
159
 * @return boolean|\Closure
160
 */
161
function endsWith()
162
{
163
  $endsWith = function ($suffix, $list) {
164
    if (is_string($suffix) && is_string($list)) {
165
      return $suffix === '' || (($temp = strlen($list) - strlen($suffix)) >= 0 && strpos($list, $suffix) !== false);
0 ignored issues
show
Unused Code introduced by
The assignment to $temp is dead and can be removed.
Loading history...
166
    }
167
    if (is_array($suffix) && is_array($list)) {
168
      $index = count($list) - count($suffix);
169
      foreach ($suffix as $it) {
170
        if ($it != $list[$index]) {
171
          return false;
172
        }
173
        $index++;
174
      }
175
      return true;
176
    }
177
    throw new \InvalidArgumentException(__FUNCTION__ . 'accepts only string or array as it arguments');
178
  };
179
  $arguments = func_get_args();
180
  $curried = curryN($endsWith, 2);
181
  return call_user_func_array($curried, $arguments);
182
}
183
184
/**
185
 * @param callable $predicateFunction
186
 * @param array $array
187
 * @return mixed
188
 */
189
function filter()
190
{
191
  $filter = function (callable $predicateFunction, array $array) {
192
     return array_values(array_filter($array, $predicateFunction));
193
  };
194
  $arguments = func_get_args();
195
  $curried = curryN($filter, 2);
196
  return call_user_func_array($curried, $arguments);
197
}
198
199
/**
200
 * @param callable $predicateFunction
201
 * @param array $array
202
 * @return mixed
203
 */
204
function filterPreserveKey()
205
{
206
  $filter = function (callable $predicateFunction, array $array) {
207
    return array_filter($array, $predicateFunction);
208
  };
209
  $arguments = func_get_args();
210
  $curried = curryN($filter, 2);
211
  return call_user_func_array($curried, $arguments);
212
}
213
214
/**
215
 * @param callable $predicateFunction
216
 * @param array $list
217
 * @return mixed
218
 */
219
function find()
220
{
221
  $find = function (callable $predicateFunction, array $list) {
222
    foreach ($list as $item) {
223
      if ($predicateFunction($item)) {
224
        return $item;
225
      }
226
    }
227
    return null;
228
  };
229
  $arguments = func_get_args();
230
  $curried = curryN($find, 2);
231
  return call_user_func_array($curried, $arguments);
232
}
233
234
function first()
235
{
236
  $first = function (array $array) {
237
    if (empty($array)) {
238
      return null;
239
    }
240
    return $array[0];
241
  };
242
  $arguments = func_get_args();
243
  $curried = curryN($first, 1);
244
  return call_user_func_array($curried, $arguments);
245
}
246
247
/**
248
 * @param callable $keySelector
249
 * @param array $array
250
 * @return array
251
 */
252
function groupBy()
253
{
254
  $groupBy = function (callable $keySelector, array $array) {
255
    return reduce(
256
      function ($acc, $item) use ($keySelector) {
257
        $key = $keySelector($item);
258
        $acc[$key] = array_key_exists($key, $acc) ? array_merge($acc[$key], [$item]) : [$item];
259
        return $acc;
260
      },
261
      [],
262
      $array
263
    );
264
  };
265
  $arguments = func_get_args();
266
  $curried = curryN($groupBy, 2);
267
  return call_user_func_array($curried, $arguments);
268
}
269
270
function head()
271
{
272
  $head = function (array $array) {
273
    if (empty($array)) {
274
      return null;
275
    }
276
    return $array[0];
277
  };
278
  $arguments = func_get_args();
279
  $curried = curryN($head, 1);
280
  return call_user_func_array($curried, $arguments);
281
}
282
283
function last()
284
{
285
  $last = function (array $array) {
286
    if (empty($array)) {
287
      return null;
288
    }
289
    return $array[count($array) - 1];
290
  };
291
  $arguments = func_get_args();
292
  $curried = curryN($last, 1);
293
  return call_user_func_array($curried, $arguments);
294
}
295
296
/**
297
 * @param callable $mapper
298
 * @param array $array
299
 * @return mixed
300
 */
301
function map()
302
{
303
  $arguments = func_get_args();
304
  $curried = curryN('array_map', 2);
305
  return call_user_func_array($curried, $arguments);
306
}
307
308
/**
309
 * a → [a] → [a]
310
 * @param mixed $item
311
 * @param array $array
312
 * @return array|\Closure
313
 */
314
function prepend()
315
{
316
  $prepend = function ($item, array $array) {
317
    return array_merge([$item], $array);
318
  };
319
  $arguments = func_get_args();
320
  $curriedAny = curryN($prepend, 2);
321
  return call_user_func_array($curriedAny, $arguments);
322
}
323
324
/**
325
 * @param callable $accumulator
326
 * @param mixed $initialValue
327
 * @param array $array
328
 * @return mixed
329
 */
330
function reduce()
331
{
332
  $reduce = function (callable $accumulator, $initialValue, array $array) {
333
    return array_reduce($array, $accumulator, $initialValue);
334
  };
335
  $arguments = func_get_args();
336
  $curried = curryN($reduce, 3);
337
  return call_user_func_array($curried, $arguments);
338
}
339
340
function tail()
341
{
342
  $tail = function (array $array) {
343
    if (empty($array)) {
344
      return null;
345
    }
346
    return $array[count($array) - 1];
347
  };
348
  $arguments = func_get_args();
349
  $curried = curryN($tail, 1);
350
  return call_user_func_array($curried, $arguments);
351
}
352