Skip to content

Commit 5c8e7b5

Browse files
committed
Add utility methods to retrieve values from arrays with type checks and defaults
1 parent 44fbdb6 commit 5c8e7b5

File tree

2 files changed

+264
-1
lines changed

2 files changed

+264
-1
lines changed

src/Support/Arr.php

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
{
77
/**
88
* @param array<array-key, mixed> $array
9-
* @param string $key
109
* @param array<array-key, mixed> $default
1110
*
1211
* @return array<array-key, mixed>
@@ -18,6 +17,78 @@ public static function getArray(array $array, string $key, array $default = []):
1817
return is_array($value) ? $value : $default;
1918
}
2019

20+
/**
21+
* @param array<array-key, mixed> $array
22+
*/
23+
public static function getStringOrNull(array $array, string $key): ?string
24+
{
25+
$value = $array[$key] ?? null;
26+
27+
return is_string($value) ? $value : null;
28+
}
29+
30+
/**
31+
* @param array<array-key, mixed> $array
32+
*/
33+
public static function getString(array $array, string $key, string $default = ''): string
34+
{
35+
return self::getStringOrNull($array, $key) ?? $default;
36+
}
37+
38+
/**
39+
* @param array<array-key, mixed> $array
40+
*/
41+
public static function getIntegerOrNull(array $array, string $key): ?int
42+
{
43+
$value = $array[$key] ?? null;
44+
45+
return is_int($value) ? $value : null;
46+
}
47+
48+
/**
49+
* @param array<array-key, mixed> $array
50+
*/
51+
public static function getInteger(array $array, string $key, int $default = 0): int
52+
{
53+
return self::getIntegerOrNull($array, $key) ?? $default;
54+
}
55+
56+
/**
57+
* @param array<array-key, mixed> $array
58+
*/
59+
public static function getFloatOrNull(array $array, string $key): ?float
60+
{
61+
$value = $array[$key] ?? null;
62+
63+
return is_float($value) ? $value : null;
64+
}
65+
66+
/**
67+
* @param array<array-key, mixed> $array
68+
*/
69+
public static function getFloat(array $array, string $key, float $default = 0.0): float
70+
{
71+
return self::getFloatOrNull($array, $key) ?? $default;
72+
}
73+
74+
/**
75+
* @param array<array-key, mixed> $array
76+
*/
77+
public static function getBooleanOrNull(array $array, string $key): ?bool
78+
{
79+
$value = $array[$key] ?? null;
80+
81+
return is_bool($value) ? $value : null;
82+
}
83+
84+
/**
85+
* @param array<array-key, mixed> $array
86+
*/
87+
public static function getBoolean(array $array, string $key, bool $default = false): bool
88+
{
89+
return self::getBooleanOrNull($array, $key) ?? $default;
90+
}
91+
2192
/**
2293
* @param array<array-key, mixed> $array
2394
* @param class-string<object> $classString

tests/Unit/Support/ArrTest.php

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,198 @@ public static function get_arr_provider(): array
6262
],
6363
[],
6464
],
65+
'get string existing key, invalid value' => [
66+
'getString',
67+
[
68+
'array' => ['key' => 1],
69+
'key' => 'key',
70+
],
71+
'',
72+
],
73+
'get string existing key, valid value' => [
74+
'getString',
75+
[
76+
'array' => ['key' => 'value'],
77+
'key' => 'key',
78+
],
79+
'value',
80+
],
81+
'get string non-existing key' => [
82+
'getString',
83+
[
84+
'array' => ['key' => 'value'],
85+
'key' => 'nonExistingKey',
86+
],
87+
'',
88+
],
89+
'get string or null existing key, invalid value' => [
90+
'getStringOrNull',
91+
[
92+
'array' => ['key' => 1],
93+
'key' => 'key',
94+
],
95+
null,
96+
],
97+
'get string or null existing key, valid value' => [
98+
'getStringOrNull',
99+
[
100+
'array' => ['key' => 'value'],
101+
'key' => 'key',
102+
],
103+
'value',
104+
],
105+
'get string or null non-existing key' => [
106+
'getStringOrNull',
107+
[
108+
'array' => ['key' => 'value'],
109+
'key' => 'nonExistingKey',
110+
],
111+
null,
112+
],
113+
'get integer existing key, invalid value' => [
114+
'getInteger',
115+
[
116+
'array' => ['key' => 'value'],
117+
'key' => 'key',
118+
],
119+
0,
120+
],
121+
'get integer existing key, valid value' => [
122+
'getInteger',
123+
[
124+
'array' => ['key' => 1],
125+
'key' => 'key',
126+
],
127+
1,
128+
],
129+
'get integer non-existing key' => [
130+
'getInteger',
131+
[
132+
'array' => ['key' => 1],
133+
'key' => 'nonExistingKey',
134+
],
135+
0,
136+
],
137+
'get integer or null existing key, invalid value' => [
138+
'getIntegerOrNull',
139+
[
140+
'array' => ['key' => 'value'],
141+
'key' => 'key',
142+
],
143+
null,
144+
],
145+
'get integer or null existing key, valid value' => [
146+
'getIntegerOrNull',
147+
[
148+
'array' => ['key' => 1],
149+
'key' => 'key',
150+
],
151+
1,
152+
],
153+
'get integer or null non-existing key' => [
154+
'getIntegerOrNull',
155+
[
156+
'array' => ['key' => 1],
157+
'key' => 'nonExistingKey',
158+
],
159+
null,
160+
],
161+
'get float existing key, invalid value' => [
162+
'getFloat',
163+
[
164+
'array' => ['key' => 'value'],
165+
'key' => 'key',
166+
],
167+
0.0,
168+
],
169+
'get float existing key, valid value' => [
170+
'getFloat',
171+
[
172+
'array' => ['key' => 1.1],
173+
'key' => 'key',
174+
],
175+
1.1,
176+
],
177+
'get float non-existing key' => [
178+
'getFloat',
179+
[
180+
'array' => ['key' => 1.1],
181+
'key' => 'nonExistingKey',
182+
],
183+
0.0,
184+
],
185+
'get float or null existing key, invalid value' => [
186+
'getFloatOrNull',
187+
[
188+
'array' => ['key' => 'value'],
189+
'key' => 'key',
190+
],
191+
null,
192+
],
193+
'get float or null existing key, valid value' => [
194+
'getFloatOrNull',
195+
[
196+
'array' => ['key' => 1.1],
197+
'key' => 'key',
198+
],
199+
1.1,
200+
],
201+
'get float or null non-existing key' => [
202+
'getFloatOrNull',
203+
[
204+
'array' => ['key' => 1.1],
205+
'key' => 'nonExistingKey',
206+
],
207+
null,
208+
],
209+
'get boolean existing key, invalid value' => [
210+
'getBoolean',
211+
[
212+
'array' => ['key' => 'value'],
213+
'key' => 'key',
214+
],
215+
false,
216+
],
217+
'get boolean existing key, valid value' => [
218+
'getBoolean',
219+
[
220+
'array' => ['key' => true],
221+
'key' => 'key',
222+
],
223+
true,
224+
],
225+
'get boolean non-existing key' => [
226+
'getBoolean',
227+
[
228+
'array' => ['key' => true],
229+
'key' => 'nonExistingKey',
230+
],
231+
false,
232+
],
233+
'get boolean or null existing key, invalid value' => [
234+
'getBooleanOrNull',
235+
[
236+
'array' => ['key' => 'value'],
237+
'key' => 'key',
238+
],
239+
null,
240+
],
241+
'get boolean or null existing key, valid value' => [
242+
'getBooleanOrNull',
243+
[
244+
'array' => ['key' => true],
245+
'key' => 'key',
246+
],
247+
true,
248+
],
249+
'get boolean or null non-existing key' => [
250+
'getBooleanOrNull',
251+
[
252+
'array' => ['key' => true],
253+
'key' => 'nonExistingKey',
254+
],
255+
null,
256+
],
65257
];
66258
}
67259

0 commit comments

Comments
 (0)