Passed
Pull Request — master (#8)
by Siwapun
04:31
created

first()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 1
nop 0
dl 0
loc 11
rs 9.9
c 0
b 0
f 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
  $first = function (array $array) {
158
    if (empty($array)) {
159
      return null;
160
    }
161
    return $array[0];
162
  };
163
  $arguments = func_get_args();
164
  $curried = curryN($first, 1);
165
  return call_user_func_array($curried, $arguments);
166
}
167
168
function head()
169
{
170
  $head = function (array $array) {
171
    if (empty($array)) {
172
      return null;
173
    }
174
    return $array[0];
175
  };
176
  $arguments = func_get_args();
177
  $curried = curryN($head, 1);
178
  return call_user_func_array($curried, $arguments);
179
}
180
181
function last()
182
{
183
  $last = function (array $array) {
184
    if (empty($array)) {
185
      return null;
186
    }
187
    return $array[count($array) - 1];
188
  };
189
  $arguments = func_get_args();
190
  $curried = curryN($last, 1);
191
  return call_user_func_array($curried, $arguments);
192
}
193
194
/**
195
 * @param callable $mapper
196
 * @param array $array
197
 * @return mixed
198
 */
199
function map()
200
{
201
  $arguments = func_get_args();
202
  $curried = curryN('array_map', 2);
203
  return call_user_func_array($curried, $arguments);
204
}
205
206
/**
207
 * a → [a] → [a]
208
 * @param mixed $item
209
 * @param array $array
210
 * @return array|\Closure
211
 */
212
function prepend()
213
{
214
  $prepend = function ($item, array $array) {
215
    return array_merge([$item], $array);
216
  };
217
  $arguments = func_get_args();
218
  $curriedAny = curryN($prepend, 2);
219
  return call_user_func_array($curriedAny, $arguments);
220
}
221
222
/**
223
 * @param callable $accumulator
224
 * @param mixed $initialValue
225
 * @param array $array
226
 * @return mixed
227
 */
228
function reduce()
229
{
230
  $reduce = function (callable $accumulator, $initialValue, array $array) {
231
    return array_reduce($array, $accumulator, $initialValue);
232
  };
233
  $arguments = func_get_args();
234
  $curried = curryN($reduce, 3);
235
  return call_user_func_array($curried, $arguments);
236
}
237
238
function tail()
239
{
240
  $tail = function (array $array) {
241
    if (empty($array)) {
242
      return null;
243
    }
244
    return $array[count($array) - 1];
245
  };
246
  $arguments = func_get_args();
247
  $curried = curryN($tail, 1);
248
  return call_user_func_array($curried, $arguments);
249
}
250