Skip to content

Commit 2b8c727

Browse files
committed
Add Arr::each method
1 parent 68bfaa4 commit 2b8c727

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/Arr.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,25 @@ public static function dot(array $array): array
4343
{
4444
return self::flatten($array);
4545
}
46+
47+
/**
48+
* Recursively assign the callable's return value to each array item.
49+
*
50+
* Array keys are preserved.
51+
*
52+
* @param array $array
53+
* @param callable $callable
54+
* @return array
55+
*/
56+
public static function each(array $array, callable $callable): array
57+
{
58+
foreach ($array as $key => $value) {
59+
if (is_array($value) && !empty($value)) {
60+
$array[$key] = self::each($value, $callable);
61+
} else {
62+
$array[$key] = call_user_func($callable, $value);
63+
}
64+
}
65+
return $array;
66+
}
4667
}

tests/ArrTest.php

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

44
class ArrTest extends \PHPUnit_Framework_TestCase
55
{
6+
/**
7+
* @covers Arr::flatten, Arr::dot
8+
*/
69
public function testFlatten()
710
{
811
$array = ['a' => 'b', 'c' => ['d' => 'e', 'f' => ['g' => [1, 2, 3 => []]]]];
@@ -23,4 +26,18 @@ public function testFlatten()
2326
$this->assertEquals(2, $flatArray['c.f.g.1']);
2427
$this->assertEquals([], $flatArray['c.f.g.3']);
2528
}
29+
30+
/**
31+
* @covers Arr::each
32+
*/
33+
public function testEach()
34+
{
35+
$array = [1, 2, 3, 4, 5, [6, 7, 8, 9, 10]];
36+
37+
$array2 = Arr::each($array, function ($value) {
38+
return $value * 2;
39+
});
40+
41+
$this->assertEquals([2, 4, 6, 8, 10, [12, 14, 16, 18, 20]], $array2);
42+
}
2643
}

0 commit comments

Comments
 (0)