Completed
Pull Request — master (#4)
by Siwapun
21:56 queued 06:35
created

concat()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
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 $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 $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
/**
156
 * @param callable $mapper
157
 * @param array $array
158
 * @return mixed
159
 */
160
function map()
161
{
162
  $arguments = func_get_args();
163
  $curried = curryN('array_map', 2);
164
  return call_user_func_array($curried, $arguments);
165
}
166
167
/**
168
 * a → [a] → [a]
169
 * @param $item
170
 * @param array $array
171
 * @return array|\Closure
172
 */
173
function prepend()
174
{
175
  $prepend = function ($item, array $array) {
176
    return array_merge([$item], $array);
177
  };
178
  $arguments = func_get_args();
179
  $curriedAny = curryN($prepend, 2);
180
  return call_user_func_array($curriedAny, $arguments);
181
}
182
183
/**
184
 * @param callable $accumulator
185
 * @param mixed $initialValue
186
 * @param array $array
187
 * @return mixed
188
 */
189
function reduce()
190
{
191
  $reduce = function (callable $accumulator, $initialValue, array $array) {
192
    return array_reduce($array, $accumulator, $initialValue);
193
  };
194
  $arguments = func_get_args();
195
  $curried = curryN($reduce, 3);
196
  return call_user_func_array($curried, $arguments);
197
}
198