Skip to content

Commit 2eb8ddc

Browse files
test remove_key
1 parent 839c284 commit 2eb8ddc

File tree

4 files changed

+56
-13
lines changed

4 files changed

+56
-13
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"src/Expand.php",
3838
"src/DotNotation.php",
3939
"src/Remove.php",
40+
"src/RemoveKey.php",
4041
"src/array_functions.php"
4142
]
4243
},

src/RemoveKey.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace BrenoRoosevelt;
5+
6+
/**
7+
* Remove elements by keys
8+
*
9+
* @param array $set The collection
10+
* @param string|int ...$keys The keys to be removed
11+
* @return int The number of removed elements
12+
*/
13+
function remove_key(array &$set, ...$keys): int
14+
{
15+
$removed = 0;
16+
foreach ($keys as $key) {
17+
if (array_key_exists($key, $set)) {
18+
unset($set[$key]);
19+
$removed++;
20+
}
21+
}
22+
23+
return $removed;
24+
}

src/array_functions.php

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,6 @@
33

44
namespace BrenoRoosevelt;
55

6-
function remove_key(array &$set, ...$keys): int
7-
{
8-
$removed = 0;
9-
foreach ($keys as $key) {
10-
if (array_key_exists($key, $set)) {
11-
unset($set[$key]);
12-
$removed++;
13-
}
14-
}
15-
16-
return $removed;
17-
}
18-
196
function pull(array &$set, $key, $default = null)
207
{
218
$value = $set[$key] ?? $default;

tests/RemoveKeyTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace BrenoRoosevelt\Tests;
5+
6+
use PHPUnit\Framework\TestCase;
7+
use function BrenoRoosevelt\remove_key;
8+
9+
class RemoveKeyTest extends TestCase
10+
{
11+
public function testRemoveOneKey()
12+
{
13+
$elements = [1, 'a' => 2, 'b' => 3];
14+
$this->assertEquals(1, remove_key($elements, 0));
15+
$this->assertEquals(['a' => 2, 'b' => 3], $elements);
16+
}
17+
18+
public function testRemoveManyKeys()
19+
{
20+
$elements = [1, 'a' => 2, 'b' => 3];
21+
$this->assertEquals(2, remove_key($elements, 0, 'a'));
22+
$this->assertEquals(['b' => 3], $elements);
23+
}
24+
25+
public function testDontRemoveKey()
26+
{
27+
$elements = [1, 'a' => 2, 'b' => 3];
28+
$this->assertEquals(0, remove_key($elements, 1));
29+
$this->assertEquals([1, 'a' => 2, 'b' => 3], $elements);
30+
}
31+
}

0 commit comments

Comments
 (0)