Skip to content

Commit 228b2db

Browse files
committed
Added array functions
1 parent dcf2e20 commit 228b2db

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed

src/ArrayFunctions.php

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,116 @@
22

33
namespace TypedPHP\Functions\ArrayFunctions;
44

5+
/**
6+
* @param array $haystack
7+
* @param mixed $needle
8+
*
9+
* @return bool
10+
*/
11+
function contains(array $haystack, $needle)
12+
{
13+
return in_array($needle, $haystack);
14+
}
15+
16+
/**
17+
* @param array $array
18+
* @param callable $callback
19+
*
20+
* @return bool
21+
*/
22+
function each(array $array, callable $callback)
23+
{
24+
return array_walk($array, $callback);
25+
}
26+
27+
/**
28+
* @param array $array
29+
* @param array $exclude
30+
*
31+
* @return array
32+
*/
33+
function exclude(array $array, array $exclude)
34+
{
35+
return array_diff($array, $exclude);
36+
}
37+
38+
/**
39+
* @param array $array
40+
* @param callable $callback
41+
*
42+
* @return array
43+
*/
44+
function filter(array $array, callable $callback)
45+
{
46+
return array_filter($array, $callback);
47+
}
48+
49+
/**
50+
* @param array $array
51+
*
52+
* @return int
53+
*/
54+
function length(array $array)
55+
{
56+
return count($array);
57+
}
58+
59+
/**
60+
* @param array $array
61+
* @param mixed $needle
62+
*
63+
* @return bool
64+
*/
65+
function has(array $array, $needle)
66+
{
67+
return array_key_exists($needle, $array);
68+
}
69+
70+
/**
71+
* @param array $array
72+
* @param string $glue
73+
*
74+
* @return string
75+
*/
76+
function join(array $array, $glue)
77+
{
78+
return \join($glue, $array);
79+
}
80+
81+
/**
82+
* @param array $array
83+
* @param callable $callback
84+
*
85+
* @return array
86+
*/
87+
function map(array $array, callable $callback)
88+
{
89+
return array_map($callback, $array);
90+
}
91+
92+
/**
93+
* @param array $array
94+
* @param array $merge
95+
*
96+
* @return array
97+
*/
98+
function merge(array $array, array $merge)
99+
{
100+
return array_merge($array, $merge);
101+
}
102+
103+
/**
104+
* @param array $array
105+
* @param int $offset
106+
* @param int $limit
107+
*
108+
* @return array
109+
*/
110+
function slice(array $array, $offset = 0, $limit = 0)
111+
{
112+
if ($limit == 0) {
113+
return array_slice($array, $offset);
114+
}
115+
116+
return array_slice($array, $offset, $limit);
117+
}

tests/ArrayFunctionTest.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,73 @@
66

77
class ArrayFunctionTest extends Test
88
{
9+
public function testContains()
10+
{
11+
$this->assertTrue(ArrayFunctions\contains([1, 2, 3], 2));
12+
$this->assertFalse(ArrayFunctions\contains([1, 2, 3], 4));
13+
}
914

15+
public function testEach()
16+
{
17+
$expected = [2, 4, 6];
18+
$actual = [];
19+
20+
ArrayFunctions\each([1, 2, 3], function ($item) use (&$actual) {
21+
$actual[] = $item * 2;
22+
});
23+
24+
$this->assertEquals($expected, $actual);
25+
}
26+
27+
public function testExclude()
28+
{
29+
$this->assertEquals([2 => 3], ArrayFunctions\exclude([1, 2, 3], [1, 2]));
30+
}
31+
32+
public function testFilter()
33+
{
34+
$actual = ArrayFunctions\filter([1, 2, 3], function ($item) {
35+
return $item == 2;
36+
});
37+
38+
$this->assertEquals([1 => 2], $actual);
39+
}
40+
41+
public function testGetLength()
42+
{
43+
$this->assertEquals(3, ArrayFunctions\length([1, 2, 3]));
44+
}
45+
46+
public function testHas()
47+
{
48+
$this->assertTrue(ArrayFunctions\has(["foo" => "bar"], "foo"));
49+
$this->assertFalse(ArrayFunctions\has(["foo" => "bar"], "baz"));
50+
}
51+
52+
public function testJoin()
53+
{
54+
$this->assertEquals("1,2,3", ArrayFunctions\join([1, 2, 3], ","));
55+
$this->assertEquals("1", ArrayFunctions\join([1], ","));
56+
}
57+
58+
public function testMap()
59+
{
60+
$actual = ArrayFunctions\map([1, 2, 3], function ($item) {
61+
return $item * 2;
62+
});
63+
64+
$this->assertEquals([2, 4, 6], $actual);
65+
}
66+
67+
public function testMerge()
68+
{
69+
$this->assertEquals([1, 2, 3, 4, 5, 6], ArrayFunctions\merge([1, 2, 3], [4, 5, 6]));
70+
}
71+
72+
public function testSlice()
73+
{
74+
$this->assertEquals([1, 2, 3], ArrayFunctions\slice([1, 2, 3]));
75+
$this->assertEquals([2, 3], ArrayFunctions\slice([1, 2, 3], 1));
76+
$this->assertEquals([2], ArrayFunctions\slice([1, 2, 3], 1, 1));
77+
}
1078
}

0 commit comments

Comments
 (0)