Completed
Pull Request — master (#4)
by Siwapun
19:18 queued 04:17
created

concat()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
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
  $append = function ($item, array $array) {
58
    return array_merge($array, [$item]);
59
  };
60
  $arguments = func_get_args();
61
  $curriedAny = curryN($append, 2);
62
  return call_user_func_array($curriedAny, $arguments);
63
}
64
65
/**
66
 * [a] → [a] → [a]
67
 * @param $item
68
 * @param array $array
69
 * @return array|\Closure
70
 */
71
function concat() {
72
  $concat = function (array $firstArray, array $secondArray) {
73
    return array_merge($firstArray, $secondArray);
74
  };
75
  $arguments = func_get_args();
76
  $curriedAny = curryN($concat, 2);
77
  return call_user_func_array($curriedAny, $arguments);
78
}
79
80
/**
81
 * @param int $index
82
 * @param array $array
83
 * @return mixed
84
 */
85
function drop()
86
{
87
  $drop = function (int $index, array $array) {
88
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
89
  };
90
  $arguments = func_get_args();
91
  $curried = curryN($drop, 2);
92
  return call_user_func_array($curried, $arguments);
93
}
94
95
/**
96
 * @param array $array
97
 * @return mixed
98
 */
99
function dropFirst()
100
{
101
  $dropFirst = drop(0);
102
  $arguments = func_get_args();
103
  $curried = curryN($dropFirst, 1);
104
  return call_user_func_array($curried, $arguments);
105
}
106
107
/**
108
 * @param array $array
109
 * @return mixed
110
 */
111
function dropLast()
112
{
113
  $dropLast = function (array $array) {
114
    $index = count($array)-1;
115
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
116
  };
117
118
  $arguments = func_get_args();
119
  $curried = curryN($dropLast, 1);
120
  return call_user_func_array($curried, $arguments);
121
}
122
123
/**
124
 * @param callable $predicateFunction
125
 * @param array $array
126
 * @return mixed
127
 */
128
function filter()
129
{
130
  $filter = function (callable $predicateFunction, array $array) {
131
    return array_values(array_filter($array, $predicateFunction));
132
  };
133
  $arguments = func_get_args();
134
  $curried = curryN($filter, 2);
135
  return call_user_func_array($curried, $arguments);
136
}
137
138
/**
139
 * @param callable $predicateFunction
140
 * @param array $array
141
 * @return mixed
142
 */
143
function filterPreserveKey()
144
{
145
  $filter = function (callable $predicateFunction, array $array) {
146
    return array_filter($array, $predicateFunction);
147
  };
148
  $arguments = func_get_args();
149
  $curried = curryN($filter, 2);
150
  return call_user_func_array($curried, $arguments);
151
}
152
153
/**
154
 * @param callable $mapper
155
 * @param array $array
156
 * @return mixed
157
 */
158
function map()
159
{
160
  $arguments = func_get_args();
161
  $curried = curryN('array_map', 2);
162
  return call_user_func_array($curried, $arguments);
163
}
164
165
/**
166
 * a → [a] → [a]
167
 * @param $item
168
 * @param array $array
169
 * @return array|\Closure
170
 */
171
function prepend() {
172
  $prepend = function ($item, array $array) {
173
    return array_merge([$item], $array);
174
  };
175
  $arguments = func_get_args();
176
  $curriedAny = curryN($prepend, 2);
177
  return call_user_func_array($curriedAny, $arguments);
178
}
179
180
/**
181
 * @param callable $accumulator
182
 * @param mixed $initialValue
183
 * @param array $array
184
 * @return mixed
185
 */
186
function reduce()
187
{
188
  $reduce = function (callable $accumulator, $initialValue, array $array) {
189
    return array_reduce($array, $accumulator, $initialValue);
190
  };
191
  $arguments = func_get_args();
192
  $curried = curryN($reduce, 3);
193
  return call_user_func_array($curried, $arguments);
194
}
195