Completed
Pull Request — master (#2)
by Siwapun
13:33
created

dropLast()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
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
 * @param int $index
52
 * @param array $array
53
 * @return mixed
54
 */
55
function drop()
56
{
57
  $drop = function (int $index, array $array) {
58
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
59
  };
60
  $arguments = func_get_args();
61
  $curried = curryN($drop, 2);
62
  return call_user_func_array($curried, $arguments);
63
}
64
65
/**
66
 * @param array $array
67
 * @return mixed
68
 */
69
function dropFirst()
70
{
71
  $dropFirst = drop(0);
72
  $arguments = func_get_args();
73
  $curried = curryN($dropFirst, 1);
74
  return call_user_func_array($curried, $arguments);
75
}
76
77
/**
78
 * @param array $array
79
 * @return mixed
80
 */
81
function dropLast()
82
{
83
  $dropLast = function (array $array) {
84
    $index = count($array)-1;
85
    return array_merge(array_slice($array, 0, $index), array_slice($array, $index + 1));
86
  };
87
88
  $arguments = func_get_args();
89
  $curried = curryN($dropLast, 1);
90
  return call_user_func_array($curried, $arguments);
91
}
92
93
/**
94
 * @param callable $predicateFunction
95
 * @param array $array
96
 * @return mixed
97
 */
98
function filter()
99
{
100
  $filter = function (callable $predicateFunction, array $array) {
101
    return array_values(array_filter($array, $predicateFunction));
102
  };
103
  $arguments = func_get_args();
104
  $curried = curryN($filter, 2);
105
  return call_user_func_array($curried, $arguments);
106
}
107
108
/**
109
 * @param callable $predicateFunction
110
 * @param array $array
111
 * @return mixed
112
 */
113
function filterPreserveKey()
114
{
115
  $filter = function (callable $predicateFunction, array $array) {
116
    return array_filter($array, $predicateFunction);
117
  };
118
  $arguments = func_get_args();
119
  $curried = curryN($filter, 2);
120
  return call_user_func_array($curried, $arguments);
121
}
122
123
/**
124
 * @param callable $mapper
125
 * @param array $array
126
 * @return mixed
127
 */
128
function map()
129
{
130
  $arguments = func_get_args();
131
  $curried = curryN('array_map', 2);
132
  return call_user_func_array($curried, $arguments);
133
}
134
135
/**
136
 * @param callable $accumulator
137
 * @param mixed $initialValue
138
 * @param array $array
139
 * @return mixed
140
 */
141
function reduce()
142
{
143
  $reduce = function (callable $accumulator, $initialValue, array $array) {
144
    return array_reduce($array, $accumulator, $initialValue);
145
  };
146
  $arguments = func_get_args();
147
  $curried = curryN($reduce, 3);
148
  return call_user_func_array($curried, $arguments);
149
}
150