Completed
Push — master ( b21f54...1b4f53 )
by Siwapun
03:57
created

tail()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.9
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
 * a → [a] → [a]
52
 * @param mixed $item
53
 * @param array $array
54
 * @return array|\Closure
55
 */
56
function append()
57
{
58
  $append = function ($item, array $array) {
59
    return array_merge($array, [$item]);
60
  };
61
  $arguments = func_get_args();
62
  $curriedAny = curryN($append, 2);
63
  return call_user_func_array($curriedAny, $arguments);
64
}
65
66
/**
67
 * [a] → [a] → [a]
68
 * @param mixed $item
69
 * @param array $array
70
 * @return array|\Closure
71
 */
72
function concat()
73
{
74
  $concat = function (array $firstArray, array $secondArray) {
75
    return array_merge($firstArray, $secondArray);
76
  };
77
  $arguments = func_get_args();
78
  $curriedAny = curryN($concat, 2);
79
  return call_user_func_array($curriedAny, $arguments);
80
}
81
82
/**
83
 * a → [a] → Boolean
84
 * @param mixed $item item to compare against
85
 * @param array $array The array to consider
86
 * @return boolean|\Closure
87
 */
88
function contains()
89
{
90
  $contains = partialRight('in_array', [true]);
91
  $arguments = func_get_args();
92
  $curriedAny = curryN($contains, 2);
93
  return call_user_func_array($curriedAny, $arguments);
94
}
95
96
/**
97
 * @param int $index
98
 * @param array $array
99
 * @return mixed
100
 */
101
function drop()
102
{
103
  $drop = function (int $index, array $array) {
104
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
105
  };
106
  $arguments = func_get_args();
107
  $curried = curryN($drop, 2);
108
  return call_user_func_array($curried, $arguments);
109
}
110
111
/**
112
 * @param array $array
113
 * @return mixed
114
 */
115
function dropFirst()
116
{
117
  $dropFirst = drop(0);
118
  $arguments = func_get_args();
119
  $curried = curryN($dropFirst, 1);
120
  return call_user_func_array($curried, $arguments);
121
}
122
123
/**
124
 * @param array $array
125
 * @return mixed
126
 */
127
function dropLast()
128
{
129
  $dropLast = function (array $array) {
130
    $index = count($array)-1;
131
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
132
  };
133
134
  $arguments = func_get_args();
135
  $curried = curryN($dropLast, 1);
136
  return call_user_func_array($curried, $arguments);
137
}
138
139
/**
140
 * @param callable $predicateFunction
141
 * @param array $array
142
 * @return mixed
143
 */
144
function filter()
145
{
146
  $filter = function (callable $predicateFunction, array $array) {
147
     return array_values(array_filter($array, $predicateFunction));
148
  };
149
  $arguments = func_get_args();
150
  $curried = curryN($filter, 2);
151
  return call_user_func_array($curried, $arguments);
152
}
153
154
/**
155
 * @param callable $predicateFunction
156
 * @param array $array
157
 * @return mixed
158
 */
159
function filterPreserveKey()
160
{
161
  $filter = function (callable $predicateFunction, array $array) {
162
    return array_filter($array, $predicateFunction);
163
  };
164
  $arguments = func_get_args();
165
  $curried = curryN($filter, 2);
166
  return call_user_func_array($curried, $arguments);
167
}
168
169
function first()
170
{
171
  $first = function (array $array) {
172
    if (empty($array)) {
173
      return null;
174
    }
175
    return $array[0];
176
  };
177
  $arguments = func_get_args();
178
  $curried = curryN($first, 1);
179
  return call_user_func_array($curried, $arguments);
180
}
181
182
function head()
183
{
184
  $head = function (array $array) {
185
    if (empty($array)) {
186
      return null;
187
    }
188
    return $array[0];
189
  };
190
  $arguments = func_get_args();
191
  $curried = curryN($head, 1);
192
  return call_user_func_array($curried, $arguments);
193
}
194
195
function last()
196
{
197
  $last = function (array $array) {
198
    if (empty($array)) {
199
      return null;
200
    }
201
    return $array[count($array) - 1];
202
  };
203
  $arguments = func_get_args();
204
  $curried = curryN($last, 1);
205
  return call_user_func_array($curried, $arguments);
206
}
207
208
/**
209
 * @param callable $mapper
210
 * @param array $array
211
 * @return mixed
212
 */
213
function map()
214
{
215
  $arguments = func_get_args();
216
  $curried = curryN('array_map', 2);
217
  return call_user_func_array($curried, $arguments);
218
}
219
220
/**
221
 * a → [a] → [a]
222
 * @param mixed $item
223
 * @param array $array
224
 * @return array|\Closure
225
 */
226
function prepend()
227
{
228
  $prepend = function ($item, array $array) {
229
    return array_merge([$item], $array);
230
  };
231
  $arguments = func_get_args();
232
  $curriedAny = curryN($prepend, 2);
233
  return call_user_func_array($curriedAny, $arguments);
234
}
235
236
/**
237
 * @param callable $accumulator
238
 * @param mixed $initialValue
239
 * @param array $array
240
 * @return mixed
241
 */
242
function reduce()
243
{
244
  $reduce = function (callable $accumulator, $initialValue, array $array) {
245
    return array_reduce($array, $accumulator, $initialValue);
246
  };
247
  $arguments = func_get_args();
248
  $curried = curryN($reduce, 3);
249
  return call_user_func_array($curried, $arguments);
250
}
251
252
function tail()
253
{
254
  $tail = function (array $array) {
255
    if (empty($array)) {
256
      return null;
257
    }
258
    return $array[count($array) - 1];
259
  };
260
  $arguments = func_get_args();
261
  $curried = curryN($tail, 1);
262
  return call_user_func_array($curried, $arguments);
263
}
264