Completed
Pull Request — master (#8)
by Siwapun
14:53
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
 * @param int $index
84
 * @param array $array
85
 * @return mixed
86
 */
87
function drop()
88
{
89
  $drop = function (int $index, array $array) {
90
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
91
  };
92
  $arguments = func_get_args();
93
  $curried = curryN($drop, 2);
94
  return call_user_func_array($curried, $arguments);
95
}
96
97
/**
98
 * @param array $array
99
 * @return mixed
100
 */
101
function dropFirst()
102
{
103
  $dropFirst = drop(0);
104
  $arguments = func_get_args();
105
  $curried = curryN($dropFirst, 1);
106
  return call_user_func_array($curried, $arguments);
107
}
108
109
/**
110
 * @param array $array
111
 * @return mixed
112
 */
113
function dropLast()
114
{
115
  $dropLast = function (array $array) {
116
    $index = count($array)-1;
117
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
118
  };
119
120
  $arguments = func_get_args();
121
  $curried = curryN($dropLast, 1);
122
  return call_user_func_array($curried, $arguments);
123
}
124
125
/**
126
 * @param callable $predicateFunction
127
 * @param array $array
128
 * @return mixed
129
 */
130
function filter()
131
{
132
  $filter = function (callable $predicateFunction, array $array) {
133
     return array_values(array_filter($array, $predicateFunction));
134
  };
135
  $arguments = func_get_args();
136
  $curried = curryN($filter, 2);
137
  return call_user_func_array($curried, $arguments);
138
}
139
140
/**
141
 * @param callable $predicateFunction
142
 * @param array $array
143
 * @return mixed
144
 */
145
function filterPreserveKey()
146
{
147
  $filter = function (callable $predicateFunction, array $array) {
148
    return array_filter($array, $predicateFunction);
149
  };
150
  $arguments = func_get_args();
151
  $curried = curryN($filter, 2);
152
  return call_user_func_array($curried, $arguments);
153
}
154
155
function first()
156
{
157
  $arguments = func_get_args();
158
  $curried = curryN(__NAMESPACE__ . '\head', 1);
159
  return call_user_func_array($curried, $arguments);
160
}
161
162
function head()
163
{
164
  $head = function (array $array) {
165
    if (empty($array)) {
166
      return null;
167
    }
168
    return $array[0];
169
  };
170
  $arguments = func_get_args();
171
  $curried = curryN($head, 1);
172
  return call_user_func_array($curried, $arguments);
173
}
174
175
function last()
176
{
177
  $arguments = func_get_args();
178
  $curried = curryN(__NAMESPACE__ . '\tail', 1);
179
  return call_user_func_array($curried, $arguments);
180
}
181
182
/**
183
 * @param callable $mapper
184
 * @param array $array
185
 * @return mixed
186
 */
187
function map()
188
{
189
  $arguments = func_get_args();
190
  $curried = curryN('array_map', 2);
191
  return call_user_func_array($curried, $arguments);
192
}
193
194
/**
195
 * a → [a] → [a]
196
 * @param mixed $item
197
 * @param array $array
198
 * @return array|\Closure
199
 */
200
function prepend()
201
{
202
  $prepend = function ($item, array $array) {
203
    return array_merge([$item], $array);
204
  };
205
  $arguments = func_get_args();
206
  $curriedAny = curryN($prepend, 2);
207
  return call_user_func_array($curriedAny, $arguments);
208
}
209
210
/**
211
 * @param callable $accumulator
212
 * @param mixed $initialValue
213
 * @param array $array
214
 * @return mixed
215
 */
216
function reduce()
217
{
218
  $reduce = function (callable $accumulator, $initialValue, array $array) {
219
    return array_reduce($array, $accumulator, $initialValue);
220
  };
221
  $arguments = func_get_args();
222
  $curried = curryN($reduce, 3);
223
  return call_user_func_array($curried, $arguments);
224
}
225
226
function tail()
227
{
228
  $tail = function (array $array) {
229
    if (empty($array)) {
230
      return null;
231
    }
232
    return $array[count($array) - 1];
233
  };
234
  $arguments = func_get_args();
235
  $curried = curryN($tail, 1);
236
  return call_user_func_array($curried, $arguments);
237
}
238