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

ArrayOps::replaceStrict()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 2
crap 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