Passed
Push — master ( b4a69d...029b26 )
by Harry
02:37
created

MergeHelpersTrait::both()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 2
dl 0
loc 5
ccs 4
cts 4
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Graze\ArrayMerger;
4
5
use Graze\ArrayMerger\ValueMerger\BothValues;
6
use Graze\ArrayMerger\ValueMerger\FirstNonNullValue;
7
use Graze\ArrayMerger\ValueMerger\FirstValue;
8
use Graze\ArrayMerger\ValueMerger\LastNonNullValue;
9
use Graze\ArrayMerger\ValueMerger\LastValue;
10
use Graze\ArrayMerger\ValueMerger\ProductValue;
11
use Graze\ArrayMerger\ValueMerger\RandomValue;
12
use Graze\ArrayMerger\ValueMerger\SumValue;
13
14
trait MergeHelpersTrait
15
{
16
    use SequentialTrait;
17
    use FlagTrait;
18
19
    /**
20
     * @param array $array1
21
     * @param array $arrays
22
     *
23
     * @return array
24
     */
25 40
    protected function checkSimpleMerge(array $array1, array $arrays = [])
26
    {
27 40
        if (count($arrays) === 0) {
28 2
            return [$array1, []];
29
        }
30
31
        // if all arrays are sequential and merge flag is not set, append them all
32 38
        if (!$this->isFlagSet(ArrayMergerInterface::FLAG_MERGE_VALUE_ARRAY)
33 38
            && $this->areSequential(array_merge([$array1], $arrays))) {
34 6
            $merged = call_user_func_array('array_merge', array_merge([$array1], $arrays));
35 6
            if ($this->isFlagSet(ArrayMergerInterface::FLAG_UNIQUE_VALUE_ARRAY)) {
36 3
                $merged = array_values(array_unique($merged));
37 3
            }
38 6
            return [$merged, []];
39
        }
40
41 36
        return [$array1, $arrays];
42
    }
43
44
    /**
45
     * Merge using the FirstNonNull Value Merger
46
     *
47
     * @param array $array1
48
     * @param array $arrays
49
     *
50
     * @return array
51
     */
52 2
    public static function firstNonNull(array $array1, array $arrays)
53
    {
54 2
        return call_user_func_array(
55 2
            [static::class, 'mergeUsing'],
56 2
            array_merge([new FirstNonNullValue(), $array1], array_slice(func_get_args(), 1))
57 2
        );
58
    }
59
60
    /**
61
     * Merge using the First Value Merger
62
     *
63
     * @param array $array1
64
     * @param array $arrays
65
     *
66
     * @return array
67
     */
68 2
    public static function first(array $array1, array $arrays)
69
    {
70 2
        return call_user_func_array(
71 2
            [static::class, 'mergeUsing'],
72 2
            array_merge([new FirstValue(), $array1], array_slice(func_get_args(), 1))
73 2
        );
74
    }
75
76
    /**
77
     * Merge using the LastNonNull Value Merger
78
     *
79
     * @param array $array1
80
     * @param array $arrays
81
     *
82
     * @return array
83
     */
84 2
    public static function lastNonNull(array $array1, array $arrays)
85
    {
86 2
        return call_user_func_array(
87 2
            [static::class, 'mergeUsing'],
88 2
            array_merge([new LastNonNullValue(), $array1], array_slice(func_get_args(), 1))
89 2
        );
90
    }
91
92
    /**
93
     * Merge using the Last Value Merger
94
     *
95
     * @param array $array1
96
     * @param array $arrays
97
     *
98
     * @return array
99
     */
100 2
    public static function last(array $array1, array $arrays)
101
    {
102 2
        return call_user_func_array(
103 2
            [static::class, 'mergeUsing'],
104 2
            array_merge([new LastValue(), $array1], array_slice(func_get_args(), 1))
105 2
        );
106
    }
107
108
    /**
109
     * Merge using the Random Value Merger
110
     *
111
     * @param array $array1
112
     * @param array $arrays
113
     *
114
     * @return array
115
     */
116 2
    public static function random(array $array1, array $arrays)
117
    {
118 2
        return call_user_func_array(
119 2
            [static::class, 'mergeUsing'],
120 2
            array_merge([new RandomValue(), $array1], array_slice(func_get_args(), 1))
121 2
        );
122
    }
123
124
    /**
125
     * Merge using the Sum Value Merger
126
     *
127
     * @param array $array1
128
     * @param array $arrays
129
     *
130
     * @return array
131
     */
132 2
    public static function sum(array $array1, array $arrays)
133
    {
134 2
        return call_user_func_array(
135 2
            [static::class, 'mergeUsing'],
136 2
            array_merge([new SumValue(), $array1], array_slice(func_get_args(), 1))
137 2
        );
138
    }
139
140
    /**
141
     * Merge using the Product Value Merger
142
     *
143
     * @param array $array1
144
     * @param array $arrays
145
     *
146
     * @return array
147
     */
148 2
    public static function product(array $array1, array $arrays)
149
    {
150 2
        return call_user_func_array(
151 2
            [static::class, 'mergeUsing'],
152 2
            array_merge([new ProductValue(), $array1], array_slice(func_get_args(), 1))
153 2
        );
154
    }
155
156
    /**
157
     * Merge using the Product Value Merger
158
     *
159
     * @param array $array1
160
     * @param array $arrays
161
     *
162
     * @return array
163
     */
164 2
    public static function both(array $array1, array $arrays)
165
    {
166 2
        return call_user_func_array(
167 2
            [static::class, 'mergeUsing'],
168 2
            array_merge([new BothValues(), $array1], array_slice(func_get_args(), 1))
169 2
        );
170
    }
171
}
172