Skip to content

Commit c42df8f

Browse files
committed
Add array_find_key method
1 parent 289b17d commit c42df8f

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

src/Php84/Php84.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,15 @@ public static function array_find(array $array, callable $callback)
7474

7575
return null;
7676
}
77+
78+
public static function array_find_key(array $array, callable $callback)
79+
{
80+
foreach ($array as $key => $value) {
81+
if ($callback($value, $key)) {
82+
return $key;
83+
}
84+
}
85+
86+
return null;
87+
}
7788
}

src/Php84/bootstrap.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,7 @@ function mb_lcfirst($string, ?string $encoding = null): string { return p\Php84:
2828
function array_find(array $array, callable $callback) { return p\Php84::array_find($array, $callback); }
2929
}
3030

31+
if (!function_exists('array_find_key')) {
32+
function array_find_key(array $array, callable $callback) { return p\Php84::array_find_key($array, $callback); }
33+
}
34+

tests/Php84/Php84Test.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ public function testArrayFind(array $array, callable $callback, $expected): void
3737
$this->assertSame($expected, array_find($array, $callback));
3838
}
3939

40+
/**
41+
* @dataProvider arrayFindKeyDataProvider
42+
*/
43+
public function testArrayFindKey(array $array, callable $callback, $expected): void {
44+
$this->assertSame($expected, array_find_key($array, $callback));
45+
}
46+
4047
public static function ucFirstDataProvider(): array {
4148
return [
4249
['', ''],
@@ -93,4 +100,22 @@ public static function arrayFindDataProvider(): array {
93100
[['a' => '1', 'b' => '12', 'c' => '123', 3 => '1234'], $callableKey, '1234'],
94101
];
95102
}
103+
104+
public static function arrayFindKeyDataProvider(): array {
105+
$callable = function ($value): bool {
106+
return strlen($value) > 2;
107+
};
108+
109+
$callableKey = function ($value, $key): bool {
110+
return is_numeric($key);
111+
};
112+
113+
return [
114+
[[], $callable, null],
115+
[['a', 'aa', 'aaa', 'aaaa'], $callable, 2],
116+
[['a', 'aa'], $callable, null],
117+
[['a' => '1', 'b' => '12', 'c' => '123', 'd' => '1234'], $callable, 'c'],
118+
[['a' => '1', 'b' => '12', 'c' => '123', 3 => '1234'], $callableKey, 3],
119+
];
120+
}
96121
}

0 commit comments

Comments
 (0)