Completed
Pull Request — master (#64)
by lan tian
04:52
created

Util::pullFromArrayByKey()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
rs 9.4285
cc 2
eloc 6
nc 2
nop 2
1
<?php
2
3
namespace Toplan\PhpSms;
4
5
class Util
6
{
7
    /**
8
     * 对数组进行赋值/取值操作
9
     *
10
     * @param array         $arr
11
     * @param mixed         $key
12
     * @param mixed         $value
13
     * @param mixed         $getDefault
14
     * @param \Closure|null $setAction
15
     * @param bool          $override
16
     * @param bool          $isSet
17
     *
18
     * @return mixed
19
     */
20
    public static function operateArray(array &$arr, $key, $value = null, $getDefault = null, \Closure $setAction = null, $override = false, $isSet = false)
21
    {
22
        if (($key === null || is_string($key) || is_int($key)) && $value === null && !$isSet) {
23
            return $key === null ? $arr :
24
                (isset($arr[$key]) ? $arr[$key] : $getDefault);
25
        }
26
        if (is_array($key) || is_object($key)) {
27
            $index = 0;
28
            if (empty($key) && $override) {
29
                $arr = [];
30
            }
31
            foreach ($key as $k => $v) {
32
                self::operateArray($arr, $k, $v, $getDefault, $setAction, ($override && !($index)), true);
33
                $index++;
34
            }
35
36
            return $arr;
37
        }
38
        if ($override) {
39
            $arr = [];
40
        }
41
        if (is_callable($setAction)) {
42
            call_user_func_array($setAction, [$key, $value, $override]);
43
        } else {
44
            $arr[$key] = $value;
45
        }
46
47
        return $arr;
48
    }
49
50
    /**
51
     * Pull the value from the specified array by key.
52
     *
53
     * @param array      $options
54
     * @param int|string $key
55
     *
56
     * @return mixed
57
     */
58
    public static function pullFromArrayByKey(array &$options, $key)
59
    {
60
        if (!isset($options[$key])) {
61
            return;
62
        }
63
        $value = $options[$key];
64
        unset($options[$key]);
65
66
        return $value;
67
    }
68
}
69