Completed
Push — master ( 5c7609...7cde34 )
by Marco
02:41
created

ArrayOps   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 61.53%

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 0
dl 0
loc 62
ccs 8
cts 13
cp 0.6153
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A filterByKeys() 0 5 1
A circularDiffKeys() 0 12 1
A replaceStrict() 0 11 2
1
<?php namespace Comodojo\Foundation\Utils;
2
3
/**
4
 * @package     Comodojo Foundation
5
 * @author      Marco Giovinazzi <[email protected]>
6
 * @license     MIT
7
 *
8
 * LICENSE:
9
 *
10
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
11
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
13
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
14
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
15
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
16
 * THE SOFTWARE.
17
 */
18
19
class ArrayOps {
20
21
    /**
22
     * Perform a circular diff between two arrays using keys.
23
     *
24
     * This method returns an array containing:
25
     * [
26
     *  [keys in $left array but not in $right],
27
     *  [keys in both %left and $right],
28
     *  [keys in $right but not in $left],
29
     * ]
30
     *
31
     * @param array $left
32
     * @param array $right
33
     * @return array
34
     */
35
    public static function circularDiffKeys(array $left, array $right) {
36
37
        return [
38
            // only in left
39
            array_diff_key($left, $right),
40
            // common keys
41
            array_intersect_key($left, $right),
42
            // only in right
43
            array_diff_key($right, $left)
44
        ];
45
46
    }
47
48
    /**
49
     * Filter an array by an array of keys
50
     *
51
     * @param array $array_of_keys
52
     * @param array $array_to_filter
53
     * @return array
54
     */
55 1
    public static function filterByKeys(array $array_of_keys, array $array_to_filter) {
56
57 1
        return array_intersect_key($array_to_filter, array_flip($array_of_keys));
58
59
    }
60
61
    /**
62
     * Replace items only if relative keys are actually defined in source array
63
     *
64
     * @param array $source
65
     * @param array $replace
66
     * @return array
67
     */
68 3
    public static function replaceStrict(array $source, array ...$replace) {
69
70 3
        $replacements = [];
71
72 3
        foreach ($replace as $items) {
73 3
            $replacements[] = array_intersect_key($items, $source);
74 3
        }
75
76 3
        return array_merge($source, ...$replacements);
77
78
    }
79
80
}
81