Passed
Pull Request — master (#264)
by Wilmer
02:50
created

ActiveArrayHelper   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 16
c 1
b 0
f 0
dl 0
loc 38
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A set() 0 14 3
A has() 0 3 1
A remove() 0 15 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\ActiveRecord;
6
7
use function array_key_exists;
8
9
final class ActiveArrayHelper
10
{
11
    public static function set(array &$array, string $key, mixed $value): void
12
    {
13
        $keys = explode('.', $key);
14
        $data = &$array;
15
16
        foreach ($keys as $k) {
17
            if (!self::has($array, $k)) {
18
                $data[$k] = [];
19
            }
20
21
            $data = &$data[$k];
22
        }
23
24
        $data = $value;
25
    }
26
27
    public static function remove(array &$array, string $key): void
28
    {
29
        $keys = explode('.', $key);
30
        $data = &$array;
31
        $lastKey = array_pop($keys);
32
33
        foreach ($keys as $k) {
34
            if (!self::has($array, $k)) {
35
                return;
36
            }
37
38
            $data = &$data[$k];
39
        }
40
41
        unset($data[$lastKey]);
42
    }
43
44
    private static function has(array $array, string $key): bool
45
    {
46
        return array_key_exists($key, $array);
47
    }
48
}
49