Completed
Pull Request — master (#7)
by
unknown
10:02 queued 08:35
created

Arr::getValue()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 3
crap 2
1
<?php
2
/**
3
 * Utils.
4
 *
5
 * @copyright Copyright (c) 2016 Starweb AB
6
 * @license   BSD 3-Clause
7
 */
8
9
namespace Starlit\Utils;
10
11
/**
12
 * Array utilities.
13
 *
14
 * @author Andreas Nilsson <http://github.com/jandreasn>
15
 */
16
class Arr
17
{
18
    /**
19
     * If any of the provided values is in an array.
20
     *
21
     * This is a convenient function for constructs like in_array('val1', $a) || in_array('val2, $a) etc.
22
     *
23
     * @param array|string $anyValue Array of needles (will try any for a match)
24
     * @param array        $array    Haystack array
25
     * @return bool
26
     */
27 2
    public static function anyIn($anyValue, $array)
28
    {
29 2
        if (is_array($anyValue)) {
30 2
            return (bool) array_intersect($anyValue, $array);
31
        }
32
33 2
        return in_array($anyValue, $array);
34
    }
35
36
    /**
37
     * If all of the provided values is in an array.
38
     *
39
     * This is a convenient function for constructs like in_array('val1', $a) && in_array('val2, $a) etc.
40
     *
41
     * @param array|mixed $allValues Array of needles (will try all for a match)
42
     * @param array       $array     Haystack array
43
     * @return bool
44
     */
45 2
    public static function allIn($allValues, $array)
46
    {
47 2
        if (is_array($allValues)) {
48 2
            if (empty($allValues)) {
49 1
                return false;
50
            }
51
52 2
            foreach ($allValues as $value) {
53 2
                if (!in_array($value, $array)) {
54 2
                    return false;
55
                }
56
            }
57
58
            // A match was found for all values if we got here
59 1
            return true;
60
        }
61
62 1
        return in_array($allValues, $array);
63
    }
64
65
    /**
66
     * Get a new array with prefix applied to all values.
67
     *
68
     * @param array  $array
69
     * @param string $prefix
70
     * @return array
71
     */
72 1
    public static function valuesWithPrefix(array $array, $prefix)
73
    {
74 1
        $newArray = [];
75 1
        foreach ($array as $oldValue) {
76 1
            $newArray[] = $prefix . $oldValue;
77
        }
78
79
80 1
        return $newArray;
81
    }
82
83
    /**
84
     * Checks if all values in an array is empty (recursively).
85
     *
86
     * Does not consider other arrays with empty values non-empty as the normal
87
     * empty() function does.
88
     *
89
     * @param array|mixed $input
90
     * @return bool
91
     */
92 2
    public static function allEmpty($input)
93
    {
94 2
        if (is_array($input)) {
95 2
            foreach ($input as $value) {
96 2
                if (!self::allEmpty($value)) {
97 1
                    return false;
98
                }
99
            }
100
101 1
            return true;
102
        } else {
103 2
            return empty($input);
104
        }
105
    }
106
107
    /**
108
     * Filter associative array on keys, by provided keys, a callable or null (like  array_filter, but for keys).
109
     *
110
     * @param array               $inputArray
111
     * @param array|callable|null $keysOrCallable
112
     * @return array
113
     */
114 3
    public static function filterKeys(array $inputArray, $keysOrCallable = null)
115
    {
116
        // Get keys
117 3
        if (is_array($keysOrCallable)) {
118 1
            $filteredKeys = $keysOrCallable;
119 2
        } elseif (is_callable($keysOrCallable)) {
120 1
            $filteredKeys = array_filter(array_keys($inputArray), $keysOrCallable);
121
        } else {
122 1
            $filteredKeys = array_filter(array_keys($inputArray));
123
        }
124
125
        // Return associative array with only the the filtered keys
126 3
        return array_intersect_key($inputArray, array_flip($filteredKeys));
127
    }
128
129
    /**
130
     * Collect values from method calls from an array of objects.
131
     *
132
     * @param array  $objectArray
133
     * @param string $methodName
134
     * @return array
135
     */
136 1
    public static function objectsMethodValues(array $objectArray, $methodName)
137
    {
138 1
        $methodValues = [];
139
140 1
        foreach ($objectArray as $object) {
141 1
            $methodValues[] = $object->$methodName();
142
        }
143
144 1
        return $methodValues;
145
    }
146
147
    /**
148
     * Get a new array with all scalar values cast to type.
149
     *
150
     * @param array  $inputArray
151
     * @param string $type
152
     * @return array
153
     */
154 2
    public static function valuesWithType(array $inputArray, $type)
155
    {
156 2
        $newArray = [];
157 2
        foreach ($inputArray as $key => $value) {
158 2
            if (is_scalar($value)) {
159 1
                $newValue = $value;
160 1
                settype($newValue, $type);
161 1
                $newArray[$key] = $newValue;
162
            }
163
        }
164
165 2
        return $newArray;
166
    }
167
168
    /**
169
     * Replaces values in array1 with values from array2 comparing keys and
170
     * discarding keys that doesn't exist in array1.
171
     *
172
     * @param array $array1
173
     * @param array $array2
174
     * @param bool  $recursive
175
     * @return array
176
     */
177 3
    public static function replaceExisting(array $array1, array $array2, $recursive = false)
178
    {
179 3
        foreach ($array1 as $key => $value) {
180 3
            if (array_key_exists($key, $array2)) {
181 3
                $value2 = $array2[$key];
182 3
                if ($recursive && is_array($value)) {
183 1
                    $value2 = self::replaceExisting($value, $value2, $recursive);
184
                }
185 3
                $array1[$key] = $value2;
186
            }
187
        }
188
189 3
        return $array1;
190
    }
191
192
    /**
193
     * Sort by array.
194
     *
195
     * @param array $sortArray
196
     * @param array $mapArray
197
     * @return array
198
     */
199 1
    public static function sortByArray(array $sortArray, array $mapArray)
200
    {
201 1
        $sortedArray = [];
202 1
        foreach ((array) $mapArray as $id) {
203 1
            if (array_key_exists($id, $sortArray)) {
204 1
                $sortedArray[] = $sortArray[$id];
205
            }
206
        }
207
208 1
        return $sortedArray;
209
    }
210
}
211