Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
Settings
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
7
100.00% covered (success)
100.00%
1 / 1
 merge
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
5
 canMerge
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Config;
6
7final class Settings
8{
9    /**
10     * @param array<string, mixed> $base
11     * @param array<string, mixed> $override
12     * @return array<string, mixed>
13     */
14    public static function merge(array $base, array $override): array
15    {
16        foreach ($override as $key => $value) {
17            $current = $base[$key] ?? null;
18
19            if (is_array($current) && is_array($value) && self::canMerge($current, $value)) {
20                $base[$key] = self::merge($current, $value);
21            } else {
22                $base[$key] = $value;
23            }
24        }
25
26        return $base;
27    }
28
29    /**
30     * @param array<array-key, mixed> $current
31     * @param array<array-key, mixed> $value
32     */
33    private static function canMerge(array $current, array $value): bool
34    {
35        return !array_is_list($current) && !array_is_list($value);
36    }
37}