GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

NestedKeyArray   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 119
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 0
loc 119
rs 10
c 0
b 0
f 0
wmc 16
lcom 1
cbo 2

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getIterator() 0 4 1
A offsetExists() 0 13 3
A offsetGet() 0 11 2
A offsetSet() 0 4 1
A offsetUnset() 0 4 1
A toArray() 0 4 1
A setNestedOffset() 0 14 3
A unsetNestedOffset() 0 12 3
1
<?php
2
/**
3
 * This file is part of library-template
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 *
8
 * @author Nicolò Martini <[email protected]>
9
 */
10
11
namespace StringTemplate;
12
13
class NestedKeyArray implements \ArrayAccess, \IteratorAggregate
14
{
15
    private $array;
16
    private $keySeparator;
17
18
    /**
19
     * @param array $array
20
     * @param string $keySeparator
21
     */
22
    public function __construct(array &$array, $keySeparator = '.')
23
    {
24
        $this->array = $array;
25
        $this->keySeparator = $keySeparator;
26
    }
27
28
    /**
29
     * {@inheritdoc}
30
     */
31
    public function getIterator()
32
    {
33
        return new NestedKeyIterator(new RecursiveArrayOnlyIterator($this->array));
34
    }
35
36
    /**
37
     * {@inheritdoc}
38
     */
39
    public function offsetExists($offset)
40
    {
41
        $keys = explode($this->keySeparator, $offset);
42
        $ary = &$this->array;
43
44
        foreach ($keys as $key) {
45
            if (!isset($ary[$key]))
46
                return false;
47
            $ary = &$ary[$key];
48
        }
49
50
        return true;
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     */
56
    public function offsetGet($offset)
57
    {
58
        $keys = explode($this->keySeparator, $offset);
59
        $result = &$this->array;
60
61
        foreach ($keys as $key) {
62
            $result = &$result[$key];
63
        }
64
65
        return $result;
66
    }
67
68
    /**
69
     * {@inheritdoc}
70
     */
71
    public function offsetSet($offset, $value)
72
    {
73
        $this->setNestedOffset($this->array, explode($this->keySeparator, $offset), $value);
74
    }
75
76
    /**
77
     * {@inheritdoc}
78
     */
79
    public function offsetUnset($offset)
80
    {
81
        $this->unsetNestedOffset($this->array, explode($this->keySeparator, $offset));
82
    }
83
84
85
    /**
86
     * @return array
87
     */
88
    public function toArray()
89
    {
90
        return $this->array;
91
    }
92
93
    /**
94
     * @param array $target
95
     * @param array $offsets
96
     * @param $value
97
     * @return $this
98
     */
99
    private function setNestedOffset(array &$target, array $offsets, $value)
100
    {
101
        $currKey = array_shift($offsets);
102
103
        if (!$offsets) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $offsets of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
104
            $target[$currKey] = $value;
105
        }  else {
106
            if (!isset($target[$currKey]))
107
                $target[$currKey] = array();
108
            $this->setNestedOffset($target[$currKey], $offsets, $value);
109
        }
110
111
        return $this;
112
    }
113
114
    /**
115
     * @param array $target
116
     * @param array $offsets
117
     * @return $this
118
     */
119
    private function unsetNestedOffset(array &$target, array $offsets)
120
    {
121
        $currKey = array_shift($offsets);
122
123
        if (!$offsets) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $offsets of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
124
            unset($target[$currKey]);
125
        } elseif (isset($target[$currKey])) {
126
            $this->unsetNestedOffset($target[$currKey], $offsets);
127
        }
128
129
        return $this;
130
    }
131
}
132