Completed
Pull Request — master (#9)
by Jodie
03:44
created

ArrayHelper::mutate()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 11
cts 11
cp 1
rs 9.2
c 0
b 0
f 0
cc 4
eloc 10
nc 4
nop 3
crap 4
1
<?php
2
3
namespace Rexlabs\Smokescreen\Helpers;
4
5
class ArrayHelper
6
{
7
    /**
8
     * Mutate an array using dot-notation.
9
     *
10
     * @param array  $array
11
     * @param string $writeKey
12
     * @param mixed  $value
13
     *
14
     * @return void
15
     */
16 6
    public static function mutate(array &$array, string $writeKey, $value)
17
    {
18 6
        $ref = &$array;
19 6
        $keys = explode('.', $writeKey);
20 6
        while (($key = array_shift($keys)) !== null) {
21 6
            $hasMoreKeys = \count($keys) > 0;
22 6
            if ($hasMoreKeys) {
23 1
                if (!\array_key_exists($key, $ref)) {
24
                    // Prepare the array
25 1
                    $ref[$key] = [];
26
                }
27 1
                $ref = &$ref[$key];
28 1
                continue;
29
            }
30
31
            // Last key
32 6
            $ref[$key] = $value;
33
        }
34 6
    }
35
}
36