ArrayUtil::set()   A
last analyzed

Complexity

Conditions 6
Paths 4

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 10
c 1
b 0
f 0
nc 4
nop 3
dl 0
loc 13
rs 9.2222
1
<?php
2
3
namespace Ipag\Sdk\Util;
4
5
abstract class ArrayUtil
6
{
7
    public const ACCESS_SEPARATOR = '.';
8
9
    public static function get(string $path, array $array, $default = null)
10
    {
11
        $splitPath = explode(self::ACCESS_SEPARATOR, $path);
12
13
        while (is_array($array) && ($key = array_shift($splitPath))) {
14
            if (array_key_exists($key, $array)) {
15
                $array = &$array[$key];
16
            } else {
17
                $array = null;
18
            }
19
        }
20
21
        return is_null($array) || !empty($splitPath) ? $default : $array;
22
    }
23
24
    public static function set(string $path, array &$array, $value = null): void
25
    {
26
        $splitPath = explode(self::ACCESS_SEPARATOR, $path);
27
28
        while (is_array($array) && ($key = array_shift($splitPath))) {
29
            if (!$splitPath) {
30
                $array[$key] = $value;
31
            } else {
32
                if (array_key_exists($key, $array) && is_array($array[$key])) {
33
                    $array = &$array[$key];
34
                } else {
35
                    $array[$key] = [];
36
                    $array = &$array[$key];
37
                }
38
            }
39
        }
40
    }
41
42
    /**
43
     * Retorna um nova array de strings dentro do array informado.
44
     *
45
     * @param array $data
46
     * @return array
47
     */
48
    public static function extractStrings(array $data): array
49
    {
50
        return array_reduce($data, function ($strings, $value) {
51
            if (is_array($value)) {
52
                return array_merge($strings, self::extractStrings($value));
53
            } elseif (is_string($value) && !is_numeric($value)) {
54
                $strings[] = $value;
55
            }
56
            return $strings;
57
        }, []);
58
    }
59
60
}